前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS 网络图片转为UIImage 和微信分享时缩略图片的压缩

iOS 网络图片转为UIImage 和微信分享时缩略图片的压缩

作者头像
honey缘木鱼
发布2018-12-14 16:37:03
2K0
发布2018-12-14 16:37:03
举报
文章被收录于专栏:娱乐心理测试娱乐心理测试

在写微信分享项目时,发现微信设置缩略图:

image

我们的图片是从阿里云那里获取的网络图片,需要把网络图片转化为UIImage,下面就是方法:

代码语言:javascript
复制
+(UIImage *) getImageFromURL:(NSString *)fileURL

{
    UIImage * result;

    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];

    result = [UIImage imageWithData:data];

    return result;
}

image.gif

微信设置的缩略图要小于32KB,否则无法调起微信,而微信也没有返回错误信息,只是[WXApi sendReq:req]=NO,所以我们要压缩小于32Kb

压缩方法为:

代码语言:javascript
复制
#pragma mark - 压缩图片
+ (UIImage *)compressImage:(UIImage *)image toByte:(NSUInteger)maxLength {
    // Compress by quality
    CGFloat compression = 1;
    NSData *data = UIImageJPEGRepresentation(image, compression);
    if (data.length < maxLength) return image;

    CGFloat max = 1;
    CGFloat min = 0;
    for (int i = 0; i < 6; ++i) {
        compression = (max + min) / 2;
        data = UIImageJPEGRepresentation(image, compression);
        if (data.length < maxLength * 0.9) {
            min = compression;
        } else if (data.length > maxLength) {
            max = compression;
        } else {
            break;
        }
    }
    UIImage *resultImage = [UIImage imageWithData:data];
    if (data.length < maxLength) return resultImage;

    // Compress by size
    NSUInteger lastDataLength = 0;
    while (data.length > maxLength && data.length != lastDataLength) {
        lastDataLength = data.length;
        CGFloat ratio = (CGFloat)maxLength / data.length;
        CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(ratio)),
                                 (NSUInteger)(resultImage.size.height * sqrtf(ratio))); // Use NSUInteger to prevent white blank
        UIGraphicsBeginImageContext(size);
        [resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
        resultImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        data = UIImageJPEGRepresentation(resultImage, compression);
    }

    return resultImage;
}

image.gif

调用方法为:

代码语言:javascript
复制
   //缩略图要小于32KB,否则无法调起微信,32KB = 32*1024B=32678
   UIImage *pressImage = [IHUtility compressImage:picture toByte:32765];

image.gif

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档