96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

ios 图片压缩-iOS 开发中的图片压缩

原创:找图网 2023-04-14 06:02:57
  • 苹果手机怎么压缩图片

  • 苹果手机压缩图片的方法如下:

    工具/材料:iPhone13手机,ios15.4系统。

    1、进入苹果手机照片页面后,选择并点击一张要进行压缩的图片。

    2、打开照片页面后,点击左下角的【分享图标】选项。

    3、在跳转的新页面中,找到并点击【存储到“文件”】。

    4、进入存储页面后,选择并点击要保存的路径,选择完成后点击右上角的【存储】。

    5、存储成功后进入苹果手机文件中,在文件中找到刚才另存为的文件夹。

    6、进入文件夹页面后,长按刚才进行存储的照片。

    7、在弹出的新窗口页面中,选择并点击【压缩】就可以。

  • iOS 开发中的图片压缩

  • 在项目中经常遇到要上传图片,如果直接上传,那么会上传比较大的图片,导致费流量,刷新时加载图片时间过长,手机内存占用率高等问题。

    一、先来介绍下概念:

    图片的压缩其实是俩概念,

    1、是 “压” 文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降,

    2、是 “缩” 文件的尺寸变小,也就是像素数减少。长宽尺寸变小,文件体积同样会减小。

    二、解决方法(以上传头像为例),先缩再压:

    2.1 矫正图片方向(照片是有方向的,避免出现“倒立”的情况)

    - (UIImage*)fixOrientation:(UIImage*)aImage {

    // No-op if the orientation is already correct

    if(==UIImageOrientationUp)

    returnaImage;

    // We need to calculate the proper transformation to make the image upright.

    // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.

    CGAffineTransformtransform =CGAffineTransformIdentity;

    switch() {

    caseUIImageOrientationDown:

    caseUIImageOrientationDownMirrored:

    transform =CGAffineTransformTranslate(transform, , );

    transform =CGAffineTransformRotate(transform,M_PI);

    break;

    caseUIImageOrientationLeft:

    caseUIImageOrientationLeftMirrored:

    transform =CGAffineTransformTranslate(transform, ,0);

    transform =CGAffineTransformRotate(transform,M_PI_2);

    break;

    caseUIImageOrientationRight:

    caseUIImageOrientationRightMirrored:

    transform =CGAffineTransformTranslate(transform,0, );

    transform =CGAffineTransformRotate(transform, -M_PI_2);

    break;

    default:

    break;

    }

    switch() {

    caseUIImageOrientationUpMirrored:

    caseUIImageOrientationDownMirrored:

    transform =CGAffineTransformTranslate(transform, ,0);

    transform =CGAffineTransformScale(transform, -1,1);

    break;

    caseUIImageOrientationLeftMirrored:

    caseUIImageOrientationRightMirrored:

    transform =CGAffineTransformTranslate(transform, ,0);

    transform =CGAffineTransformScale(transform, -1,1);

    break;

    default:

    break;

    }

    // Now we draw the underlying CGImage into a new context, applying the transform

    // calculated above.

    CGContextRefctx =CGBitmapContextCreate(NULL, , ,

    CGImageGetBitsPerComponent(),0,

    CGImageGetColorSpace(),

    CGImageGetBitmapInfo());

    CGContextConcatCTM(ctx, transform);

    switch() {

    caseUIImageOrientationLeft:

    caseUIImageOrientationLeftMirrored:

    caseUIImageOrientationRight:

    caseUIImageOrientationRightMirrored:

    CGContextDrawImage(ctx,CGRectMake(0,0,,), );

    break;

    default:

    CGContextDrawImage(ctx,CGRectMake(0,0,,), );

    break;

    }

    CGImageRef cgimg =CGBitmapContextCreateImage(ctx);

    UIImage *img = [UIImageimageWithCGImage:cgimg];

    CGContextRelease(ctx);

    CGImageRelease(cgimg);

    return img;

    }

    2.2 拿到上面矫正过的图片,缩小图片尺寸,调用下面方法传入newSize,如(200,200):

    + (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize

    {

    UIGraphicsBeginImageContext(newSize);

    [imagedrawInRect:CGRectMake(0,0,,)];

    UIImage* newImage =UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return newImage;

    }

    2.3 将2.2的图片再压,这个方法可以重复压

    //调整大小

    NSData *imageData =UIImageJPEGRepresentation(newImage,rate);

    NSUIntegersizeOrigin = [image Datalength];//多少KB

    NSUIntegersizeOriginKB = sizeOrigin /1024;//多少KB

    2.4 上传头像

    调用后台接口,把imageData二进制数据上传即可

    总结:对图片压缩处理时,在保证图片清晰度变化不大时,减小图片文件大小。方法2.2中的newSize 和 2.3中的rate要以实际效果来设置,我在自己项目中上传的头像最终尺寸是200*200像素,大小为4KB左右。

  • iOS开发图片压缩的两种方式2019-01-18

  • 工作中遇到需要将图片压缩之后上传的需求。经过多方查询资料,目前总结出来两种方式总结一下备用。

    UIImageJPEGRepresentation(image, compression)

    这个方法可以将iPhone拍摄的照片压缩到几百Kb的极限值,到极限值之后不管compression这个参数多小,该函数返回的数据大小都不会再改变。也就是说这个方法的压缩是有最小值的,得到的是jpg格式。

    另外有一个方法UIImagePNGRepresentation(<#UIImage * _Nonnull image#>)这个方法得到的数据会比之前那个方法得到的数据占用空间更大。

    为了达到压缩的目的,这种方法是有损的,就是会降低图片质量。

    这种方法的到的图片,newSize越小质量越差,但是得到的图片占用内存越小。设置多大的newSize自己斟酌决定。

    综合一下自己平常在开发中常用的就是,先使用第一种方法保持精度不变,compression选择0.6或者0.7进行第一次压缩,然后再用第二种方法进行尺寸压缩,得到的就是我们最终想要的图片。

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com