美文网首页iOS点点滴滴iOS开发笔记ios实用开发技巧
压缩图片到指定尺寸大小和指定文件大小之注意坑--image和da

压缩图片到指定尺寸大小和指定文件大小之注意坑--image和da

作者: 指尖的世界 | 来源:发表于2017-11-06 11:04 被阅读96次

    网上提供的大都是UIImage的回调,返回image,但是我们使用的时候是作文data文件上传的,so,很多人在测试完发现这个递减的压缩效果还是不错的,随即就去用了,殊不知,压缩后的image转成data去使用的时候又把图片变大了~

    代码如下:

    /**

    *  压缩图片到指定尺寸大小

    *

    *  @param image 原始图片

    *  @param size  目标大小

    *

    *  @return 生成图片

    */

    +(UIImage *)compressOriginalImage:(UIImage *)image toSize:(CGSize)size{

    UIImage * resultImage = image;

    UIGraphicsBeginImageContext(size);

    [resultImage drawInRect:CGRectMake(00, 0, size.width, size.height)];

    UIGraphicsEndImageContext();

    return image;

    }

    /**

    *  压缩图片到指定文件大小

    *

    *  @param image 目标图片

    *  @param size  目标大小(最大值)

    *

    *  @return 返回的图片文件

    */

    +(UIImage *)compressOriginalImage:(UIImage *)image toKb:(NSInteger)kb{

    if (!image) {

    return image;

    }

    if (kb<1) {

    return image;

    }

    kb*=1024;

    CGFloat compression = 0.9f;

    CGFloat maxCompression = 0.1f;

    NSData *imageData = UIImageJPEGRepresentation(image, compression);

    while ([imageData length] > kb && compression > maxCompression) {

    compression -= 0.1;

    imageData = UIImageJPEGRepresentation(image, compression);

    }

    //data转成image后图片内存会变大,不可用

    UIImage *compressedImage = [UIImage imageWithData:imageData];

    return compressedImage;

    }

    所以我们最好直接使用data压缩,如下处理:

    -(NSData *)compressOriginalImage:(UIImage *)image toKb:(NSInteger)kb{

    kb*=1024;

    CGFloat compression = 0.9f;

    CGFloat maxCompression = 0.1f;

    NSData *imageData = UIImageJPEGRepresentation(image, compression);

    while ([imageData length] > kb && compression > maxCompression) {

    compression -= 0.1;

    imageData = UIImageJPEGRepresentation(image, compression);

    }

    return imageData;

    }

    这样直接返回data即可

    相关文章

      网友评论

        本文标题:压缩图片到指定尺寸大小和指定文件大小之注意坑--image和da

        本文链接:https://www.haomeiwen.com/subject/acokmxtx.html