注册 登录
主题 : 代码片段:根据分辨率缩放并旋转图片。最重要的是,消除图片白边!难道你们没发现很多app的图片有一条白边
级别: 精灵王

状态: 连续签到 - [44天]
UID: 16002
精华: 0
发帖: 631
可可豆: 5055 CB
威望: 5091 点
在线时间: 686(时)
注册时间: 2010-03-23
最后登录: 2017-06-13
0 楼:  发表于: 2013-12-28 14:27    发自: Web Page

代码片段:根据分辨率缩放并旋转图片。最重要的是,消除图片白边!难道你们没发现很多app的图片有一条白边   

管理提醒: 本帖被 wode211 执行加亮操作(2013-12-28)
根据传入的分辨率(如:960)缩放并且将图片的方向摆正,最最重要,大家玩了那么多ios app,没发现很多app处理的图片有白边?各位基友,拿去用吧,不用谢


+(UIImage *)scaleAndRotateImage:(UIImage *)image resolution:(int)kMaxResolution{
    CGImageRef imgRef = image.CGImage;
    CGFloat width = CGImageGetWidth(imgRef);
    CGFloat height = CGImageGetHeight(imgRef);
    
    CGAffineTransform transform = CGAffineTransformIdentity;
    CGRect bounds = CGRectMake(0, 0, width, height);
    if (width > kMaxResolution || height > kMaxResolution) {
        CGFloat ratio = width/height;
        if (ratio > 1) {
            bounds.size.width = kMaxResolution;
            bounds.size.height = bounds.size.width / ratio;
        } else {
            bounds.size.height = kMaxResolution;
            bounds.size.width = bounds.size.height * ratio;
        }
    }
    
    CGFloat scaleRatio = bounds.size.width / width;
    CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));
    CGFloat boundHeight;
    
    UIImageOrientation orient = image.imageOrientation;
    switch(orient) {
        case UIImageOrientationUp:
            transform = CGAffineTransformIdentity;
            break;
        case UIImageOrientationUpMirrored:
            transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
            transform = CGAffineTransformScale(transform, -1.0, 1.0);
            break;
        case UIImageOrientationDown:
            transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
            transform = CGAffineTransformRotate(transform, M_PI);
            break;
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);
            transform = CGAffineTransformScale(transform, 1.0, -1.0);
            break;
        case UIImageOrientationLeftMirrored:
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);
            transform = CGAffineTransformScale(transform, -1.0, 1.0);
            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
            break;
        case UIImageOrientationLeft:
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);
            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
            break;
        case UIImageOrientationRightMirrored:
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeScale(-1.0, 1.0);
            transform = CGAffineTransformRotate(transform, M_PI / 2.0);
            break;
        case UIImageOrientationRight:
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);
            transform = CGAffineTransformRotate(transform, M_PI / 2.0);
            break;
        default:
            [NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];
    }
    
    UIGraphicsBeginImageContext(CGSizeMake(floorf(bounds.size.width), floorf(bounds.size.height)));
    CGContextRef context = UIGraphicsGetCurrentContext();
    if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) {
        CGContextScaleCTM(context, -scaleRatio, scaleRatio);
        CGContextTranslateCTM(context, -height, 0);
    } else {
        CGContextScaleCTM(context, scaleRatio, -scaleRatio);
        CGContextTranslateCTM(context, 0, -height);
    }
    CGContextConcatCTM(context, transform);
    
    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, floorf(width), floorf(height)), imgRef);
    UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
     return imageCopy;
}



关键词: image
级别: 精灵王

状态: 连续签到 - [341天]
UID: 4020
精华: 0
发帖: 437
可可豆: 24891 CB
威望: 25992 点
在线时间: 3388(时)
注册时间: 2009-04-02
最后登录: 2018-08-21
1 楼:  发表于: 2013-12-28 14:35    发自: Web Page
Re:代码片段:根据分辨率缩放并旋转图片。最重要的是,消除图片白边!难道你们没发现很多app的图片有一 ..
沙发~ 多谢分享!
一直在努力,一直都觉得努力得还不够~~
www.etware.com
级别: 光明使者

状态: 连续签到 - [255天]
UID: 2069
精华: 5
发帖: 1091
可可豆: 124131 CB
威望: 126125 点
在线时间: 2583(时)
注册时间: 2009-02-07
最后登录: 2019-01-18
2 楼:  发表于: 2013-12-28 15:48    发自: Web Page
Re:代码片段:根据分辨率缩放并旋转图片。最重要的是,消除图片白边!难道你们没发现很多app的图片有一 ..
板凳~~~~
汉字字典 -2018最新专业版
级别: 精灵王

UID: 47876
精华: 0
发帖: 1517
可可豆: 5147 CB
威望: 5418 点
在线时间: 1079(时)
注册时间: 2011-01-21
最后登录: 2018-09-21
3 楼:  发表于: 2013-12-28 15:55    发自: Web Page
Re:代码片段:根据分辨率缩放并旋转图片。最重要的是,消除图片白边!难道你们没发现很多app的图片有一 ..

级别: 新手上路
UID: 131498
精华: 0
发帖: 17
可可豆: 44 CB
威望: 44 点
在线时间: 222(时)
注册时间: 2012-03-21
最后登录: 2017-06-28
4 楼:  发表于: 2013-12-30 17:08    发自: Web Page
Re:代码片段:根据分辨率缩放并旋转图片。最重要的是,消除图片白边!难道你们没发现很多app的图片有一 ..
有bug,
kMaxResolution传值有没有什么限制的,传个320就闪退了。
[ 此帖被pengyoubieku在2013-12-30 17:38重新编辑 ]

级别: 精灵王

状态: 连续签到 - [44天]
UID: 16002
精华: 0
发帖: 631
可可豆: 5055 CB
威望: 5091 点
在线时间: 686(时)
注册时间: 2010-03-23
最后登录: 2017-06-13
5 楼:  发表于: 2013-12-30 19:58    发自: Web Page
回 4楼(pengyoubieku) 的帖子
我的是ARC,你看看。
级别: 精灵王

状态: 连续签到 - [71天]
UID: 21480
精华: 0
发帖: 1541
可可豆: 7433 CB
威望: 8488 点
在线时间: 1647(时)
注册时间: 2010-06-07
最后登录: 2018-07-23
6 楼:  发表于: 2013-12-31 18:16    发自: Web Page
回 楼主(yshapply) 的帖子

白边是ps过渡压缩的结果……
级别: 新手上路
状态: 连续签到 - [1天]
UID: 571901
精华: 0
发帖: 2
可可豆: 8 CB
威望: 6 点
在线时间: 10(时)
注册时间: 2016-07-06
最后登录: 2018-05-25
7 楼:  发表于: 2017-05-06 15:13    发自: Web Page
Re:代码片段:根据分辨率缩放并旋转图片。最重要的是,消除图片白边!难道你们没发现很多app的图片有一 ..
感谢楼主,我也是遇到了.要不是提出Bug我也没有发现这个问题呢.我们的产品有白天和夜间模式,一般白天模式主色调都是偏白,所以看不出来,也不是很明显,只有夜间模式的时候,主色调变成暗色,这个白天就明显了.试了很多方法,之前也没有怀疑过是裁切出了问题.今天恰巧看到楼主帖子,搬来试了试,果然解决了. 灰常感谢.
级别: 精灵王

状态: 连续签到 - [162天]
UID: 515211
精华: 0
发帖: 709
可可豆: 2610 CB
威望: 2320 点
在线时间: 1373(时)
注册时间: 2015-10-19
最后登录: 2019-01-18
8 楼:  发表于: 2017-06-05 08:55    发自: Web Page
Re:代码片段:根据分辨率缩放并旋转图片。最重要的是,消除图片白边!难道你们没发现很多app的图片有一 ..
学习
在玩一会
级别: 侠客
状态: 连续签到 - [6天]
UID: 560804
精华: 0
发帖: 206
可可豆: 320 CB
威望: 312 点
在线时间: 923(时)
注册时间: 2016-05-03
最后登录: 2018-04-25
9 楼:  发表于: 2017-06-05 09:59    发自: Web Page
Re:代码片段:根据分辨率缩放并旋转图片。最重要的是,消除图片白边!难道你们没发现很多app的图片有一 ..

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部