iOS 图片显示中遇到的压缩与裁剪问题
2015-01-04 18:44
507 查看
先上一张截图:
我们假设要在截图中的举行图片展示区显示图片,由于原图片的宽高比例与图片显示窗口的宽高比例不一定相同,所以,直接将图片扔进去会改变图片的宽高比例,展示效果不好。
这时你可能想到设置UIImageView的属性 _imageView.contentMode
= UIViewContentModeCenter; 设置该属性后,我们会发现图片的宽高比例确实正确了,但是窗口中只显示了图片的一部分,这说明图片整体尺寸没有压缩,按照原图进行显示了。怎样才能达到既缩小图片又不改变原来的宽高比例呢?
方法一:将图片按照原来的宽高比例压缩到与窗口合适的大小,然后在设置了_imageView.contentMode = UIViewContentModeCenter;
这个属性的UIImageView中展示压缩后的图片。
方法二:按照窗口宽高比例,将原图横向或者纵向裁剪掉多余的部分,然后不设置UIImageView的contentMode属性,将裁剪后的图片送进去,使其自动适应窗口。
我们假设要在截图中的举行图片展示区显示图片,由于原图片的宽高比例与图片显示窗口的宽高比例不一定相同,所以,直接将图片扔进去会改变图片的宽高比例,展示效果不好。
这时你可能想到设置UIImageView的属性 _imageView.contentMode
= UIViewContentModeCenter; 设置该属性后,我们会发现图片的宽高比例确实正确了,但是窗口中只显示了图片的一部分,这说明图片整体尺寸没有压缩,按照原图进行显示了。怎样才能达到既缩小图片又不改变原来的宽高比例呢?
方法一:将图片按照原来的宽高比例压缩到与窗口合适的大小,然后在设置了_imageView.contentMode = UIViewContentModeCenter;
这个属性的UIImageView中展示压缩后的图片。
//压缩图片 - (UIImage *)image:(UIImage*)image scaledToSize:(CGSize)newSize { // Create a graphics image context UIGraphicsBeginImageContext(newSize); // Tell the old image to draw in this new context, with the desired // new size [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; // Get the new image from the context UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); // End the context UIGraphicsEndImageContext(); // Return the new image. 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]; }结果表明方法二效果更好。
相关文章推荐
- iOS 压缩与裁剪图片问题
- ionic或者angularjs中图片显示压缩问题解决 or 显示较大图片的某一块区域、裁剪显示
- 关于应用程序图片在保存读取显示所遇到的问题。
- iOS界面开发:xib添加了UIImageView在iOS6显示不了图片的问题
- ios-UI常见问题之TableView异步加载图片错乱显示
- iOS 用这些方法把图片不压缩,部分显示在imageView上面。。。。
- Java裁剪压缩PNG图片,透明背景色变黑问题解决
- ios客户端base64上传图片到java服务器遇到的问题
- chrome 显示图片遇到的问题,与 淘宝图片服务器 缓存 有关系
- iOS-BUG整理 设置按钮图片和文字遇到的问题
- 问题:部署到iis上后Chart图片不显示;结果:使用webchart过程中遇到的一些问题
- URL含中文以及显示中文名图片遇到的问题
- iOS常见问题之异步加载图片在UITableView里显示时的奇异的现象
- iOS UIImageView显示图片 以及 图片裁剪
- 显示GIF格式图片遇到的问题
- 今天遇到的IE6下jquery js将图片写入html图片不显示的问题
- ios 关于UIImageView的显示问题——居中显示或者截取图片的中间部分显示
- iOS开发-button setImage按钮不显示图片问题
- 调用系统摄像头拍照,对拍照后的图片进行裁剪和压缩处理,并显示在imageview上面
- 压缩css样式后出现的的ie8下Background图片不显示的问题