详解IOS图片压缩处理

 更新时间:2016年07月28日 17:05:06   投稿:daisy  
在日常IOS开发中,感觉图片尺寸太大,想压缩成小一点像素的。那么该如何做呢?本文通过“压缩”两个概念及实例来告诉大家如何进行图片压缩处理才是最好的。

前言

 1、确图片的压缩的概念:

“压” 是指文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降。

“缩” 是指文件的尺寸变小,也就是像素数减少,而长宽尺寸变小,文件体积同样会减小。

 

 2、图片压的处理

对于“压”的功能,我们可以使用UIImageJPEGRepresentationUIImagePNGRepresentation方法实现,

如代码:

//图片压
- (void)_imageCompression{
  UIImage *image = [UIImage imageNamed:@"HD"];
  //第一个参数是图片对象,第二个参数是压的系数,其值范围为0~1。
  NSData * imageData = UIImageJPEGRepresentation(image, 0.7);
  UIImage * newImage = [UIImage imageWithData:imageData];
}

2.1关于PNG和JPEG格式压缩

UIImageJPEGRepresentation函数需要两个参数:图片的引用和压缩系数而UIImagePNGRepresentation只需要图片引用作为参数.

UIImagePNGRepresentation(UIImage *image)要比UIImageJPEGRepresentation(UIImage* image, 1.0)返回的图片数据量大很多.

同样的一张照片, 使用UIImagePNGRepresentation(image)返回的数据量大小为200K,而 UIImageJPEGRepresentation(image, 1.0)返回的数据量大小只为150K,比前者少了50K.

如果对图片的清晰度要求不是极高,建议使用UIImageJPEGRepresentation,可以大幅度降低图片数据量.比如,刚才拍摄的图片,通过调用UIImageJPEGRepresentation(image, 1.0)读取数据时,返回的数据大小为140K,但更改压缩系数为0.5再读取数据时,返回的数据大小只有11K,大大压缩了图片的数据量,而且清晰度并没有相差多少,图片的质量并没有明显的降低。因此,在读取图片数据内容时,建议优先使用UIImageJPEGRepresentation,并可根据自己的实际使用场景,设置压缩系数,进一步降低图片数据量大小。

提示:压缩系数不宜太低,通常是0.3~0.7,过小则可能会出现黑边等。

3、图片“缩”处理

通过[image drawInRect:CGRectMake(0, 0, targetWidth, targetHeight)]可以进行图片“缩”的功能。

 

/**
 * 图片压缩到指定大小
 * @param targetSize 目标图片的大小
 * @param sourceImage 源图片
 * @return 目标图片
 */
 - (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize withSourceImage:(UIImage *)sourceImage
{
UIImage *newImage = nil;
CGSize imageSize = sourceImage.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
CGFloat targetWidth = targetSize.width;
CGFloat targetHeight = targetSize.height;
CGFloat scaleFactor = 0.0;
CGFloat scaledWidth = targetWidth;
CGFloat scaledHeight = targetHeight;
CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
if (CGSizeEqualToSize(imageSize, targetSize) == NO)
{
  CGFloat widthFactor = targetWidth / width;
  CGFloat heightFactor = targetHeight / height;
  if (widthFactor > heightFactor)
    scaleFactor = widthFactor; // scale to fit height
  else
    scaleFactor = heightFactor; // scale to fit width
  scaledWidth= width * scaleFactor;
  scaledHeight = height * scaleFactor;
  // center the image
  if (widthFactor > heightFactor)
  {
    thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
  }
  else if (widthFactor < heightFactor)
  {
    thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
  }
}
UIGraphicsBeginImageContext(targetSize); // this will crop
CGRect thumbnailRect = CGRectZero;
thumbnailRect.origin = thumbnailPoint;
thumbnailRect.size.width= scaledWidth;
thumbnailRect.size.height = scaledHeight;

[sourceImage drawInRect:thumbnailRect];
newImage = UIGraphicsGetImageFromCurrentImageContext();
if(newImage == nil)
  NSLog(@"could not scale image");

//pop the context to get back to the default
UIGraphicsEndImageContext();

 return newImage;
}

这个UIImageJPEGRepresentation(image, 0.0),UIImagePNGRepresentation(image); 是1的功能。
这个 [sourceImage drawInRect:CGRectMake(0,0,targetWidth, targetHeight)] 是2的功能。

总结

所以,这俩得结合使用来满足需求,不然你一味的用1,导致,图片模糊的不行,但是尺寸还是很大。
以上就是在IOS中压缩图片处理的详细介绍及实例,希望对大家学习IOS开发有所帮助。

相关文章

  • iOS定制UISearchBar导航栏同步iOS11的方法

    iOS定制UISearchBar导航栏同步iOS11的方法

    本篇文章主要介绍了iOS定制UISearchBar导航栏同步iOS11的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • iOS实现简易的计算器

    iOS实现简易的计算器

    这篇文章主要为大家详细介绍了iOS实现简易的计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • iOS开发之UITableView左滑删除等自定义功能

    iOS开发之UITableView左滑删除等自定义功能

    今天来给大家介绍下iOS开发中UITableView左滑实现微信中置顶,删除等功能。对大家开发iOS具有一定的参考借鉴价值,有需要的朋友们一起来看看吧。
    2016-09-09
  • iOS如何跳转到App Store下载评分页面示例代码

    iOS如何跳转到App Store下载评分页面示例代码

    最近在工作中遇到一个需求,需要跳转到App Store下载评分,通过查找相关的资料最终解决了,下面这篇文章主要给大家介绍了关于iOS如何跳转到App Store下载评分页面的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • iOS开发系列--地图与定位源代码详解

    iOS开发系列--地图与定位源代码详解

    本篇文章主要介绍了iOS开发系列--详解地图与定位,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • iOS Runntime 动态添加类方法并调用-class_addMethod

    iOS Runntime 动态添加类方法并调用-class_addMethod

    这篇文章主要介绍了iOS Runntime 动态添加类方法并调用-class_addMethod的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • iOS tableView实现下拉图片放大效果

    iOS tableView实现下拉图片放大效果

    这篇文章主要为大家详细介绍了iOS tableView实现下拉图片放大效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 详解iOS中Button按钮的状态和点击事件

    详解iOS中Button按钮的状态和点击事件

    这篇文章先是给大家介绍iOS中Button按钮的状态,而后又详细介绍了iOS中按钮点击事件处理方式,本文介绍的很详细,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-09-09
  • iOS实现scrollview上拉显示Navbar下拉隐藏功能详解

    iOS实现scrollview上拉显示Navbar下拉隐藏功能详解

    这篇文章主要给大家介绍了利用iOS实现scrollview上拉显示Navbar下拉隐藏功能的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • IOS 解决UIButton 点击卡顿/延迟的问题

    IOS 解决UIButton 点击卡顿/延迟的问题

    本文主要介绍 IOS UIButton, 这里给大家提供代码实例作为参考,解决 UIButton 点击卡顿或者延迟问题,在开发 IOS 项目的小伙伴如果遇到这样的问题可以参考下
    2016-07-07

最新评论