问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

iOS 图片显示中遇到的压缩与裁剪问题

发布网友 发布时间:2022-09-15 13:14

我来回答

1个回答

热心网友 时间:2023-10-09 04:45

我们假设要在截图中的举行图片展示区显示图片,由于原图片的宽高比例与图片显示窗口的宽高比例不一定相同,所以,直接将图片扔进去会改变图片的宽高比例,展示效果不好。

这时你可能想到设置UIImageView的属性 _imageView.contentMode = UIViewContentModeCenter;  设置该属性后,我们会发现图片的宽高比例确实正确了,但是窗口中只显示了图片的一部分,这说明图片整体尺寸没有压缩,按照原图进行显示了。怎样才能达到既缩小图片又不改变原来的宽高比例呢?

方法一:将图片按照原来的宽高比例压缩到与窗口合适的大小,然后在设置了_imageView.contentMode = UIViewContentModeCenter;  这个属性的UIImageView中展示压缩后的图片。

//压缩图片

- (UIImage *)image:(UIImage*)image scaledToSize:(CGSize)newSize

{

// 创建一个图形上下文形象

UIGraphicsBeginImageContext(newSize);

// 告诉旧图片画在这个新的环境,所需的

// 新的尺寸

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

// 新形象从上下文

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

// 结束上下文

UIGraphicsEndImageContext();

// 返回新形象

return newImage;

}

上面方法的参数newSize是和图片显示窗口差不多大的,结果出现了原图清晰,但压缩后图片不清晰的情况。

方法二:按照窗口宽高比例,将原图横向或者纵向裁剪掉多余的部分,然后不设置UIImageView的contentMode属性,将裁剪后的图片送进去,使其自动适应窗口。

//裁剪图片

- (UIImage *)cutImage:(UIImage*)image

{

//压缩图片

CGSize newSize;

CGImageRef imageRef = nil;

if ((image.size.width / image.size.height) < (_headerView.bgImgView.size.width / _headerView.bgImgView.size.height)) {

newSize.width = image.size.width;

newSize.height = image.size.width * _headerView.bgImgView.size.height / _headerView.bgImgView.size.width;

imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(0, fabs(image.size.height - newSize.height) / 2, newSize.width, newSize.height));

} else {

newSize.height = image.size.height;

newSize.width = image.size.height * _headerView.bgImgView.size.width / _headerView.bgImgView.size.height;

imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(fabs(image.size.width - newSize.width) / 2, 0, newSize.width, newSize.height));

}

return [UIImage imageWithCGImage:imageRef];

}

结果表明方法二效果更好。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
帮我把这段中文翻译成法语读一下 你好,很荣幸见到你,我是一名来自湖北武... QQ纯真数据库有什么用?怎么用?在线等! 内部控制评审的具体程序是什么呢? cng配件是什么意思? 新人求教,该大修呢还是换发动机 ...时间有一年了。而且偶尔恶心,有时肚子上部分发热。而且运动起来特别... 真我之境·无瑕回归怎么锻造 资格预审通过后,可否在开标时更换项目各岗位人员,具体说天津市的。 天津市政府令+项目经理要求 颐和园圆明园哪个好 iOS UIImageView(contentMode)图片的三种填充方式 如何让电脑开机不上网 r9000p首次开机怎么不联网 公司注销了账本丢失了严重吗 公司注销没有账本怎么办 破产清算账本丢失怎么办 公司破产清算财务帐簿没有了怎么办 国税v2.0可以在win10运行吗 我是新手,请问网上申报国税和地税的流程是怎样的,哪位有模拟的学啊 整流就是指把什么转换成什么的过程 南阳武侯祠大门对联 成都武侯祠对联 空调制冷不制热是什么问题引起的 秋季喝什么汤水养生好 梦回传奇txt全集下载 梦回传奇单机攻略 找一个一个星期才会合区的传奇,那个朋友帮介绍一个呀 耳机国行单机是什么意思 铁友网是正规网站吗 仙域网页弹窗怎么出去? iOS 开发-UIImageViews(图片)的使用 挂的涨停条件单会在涨停板开板时成交吗? 多拉A梦为什么木有耳朵?大结局是哪一集? 魅族手机全部型号 请问如何注册paypal 魅族手机有几款啊哪一款好啊 电脑开机进不了安全模式? 电脑反应太快了 进不了安全模式 请问该怎么描述莱戈拉斯式的精灵发型? 介绍几个像御剑江湖那样的网页游戏 Angelababy绝美精灵造型曝光,她适合精灵造型吗? 网页游戏 御剑江湖 有没有私服啊 有的话给个网址 没的话 期待一个高手破解哇 杨颖绝美精灵造型,不得不说她是什么风格都能驾驭,她还有过哪些绝美造型? 显示器没有最佳分辨率选项怎么办 液晶显示器最佳分辨率调不出 魅蓝是魅族出的手机?都有那几款 销售易CRM手机版怎么Z.C? crm销售易怎么使用方法 6月2日,魅族要出那几款手机? 荒野行动PC 一进飓风半岛就闪退,上个月一直玩飓风半岛,几天他休息白天上突然进去就闪退了