ios中图像进行压缩方法汇总

   在Iphone上有两种读取图片数据的简单方法: UIImageJPEGRepresentation和UIImagePNGRepresentation. UIImageJPEGRepresentation函数需要两个参数:图片的引用和压缩系数.而UIImagePNGRepresentation只需要图片引用作为参数.

  方法一:

  代码如下:

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

  {

  CGSize imageSize = image.size;

  CGFloat width = imageSize.width;

  CGFloat height = imageSize.height;

  if (width <= newSize.width && height <= newSize.height){

  return image;

  }

  if (width == 0 || height == 0){

  return image;

  }

  CGFloat widthFactor = newSize.width / width;

  CGFloat heightFactor = newSize.height / height;

  CGFloat scaleFactor = (widthFactor

  CGFloat scaledWidth = width * scaleFactor;

  CGFloat scaledHeight = height * scaleFactor;

  CGSize targetSize = CGSizeMake(scaledWidth,scaledHeight);

  UIGraphicsBeginImageContext(targetSize);

  [image drawInRect:CGRectMake(0,0,scaledWidth,scaledHeight)];

  UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  return newImage;

  }

  方法二:

  .h具体code

   代码如下:

  #import

  @interface UIImage (UIImageExt)

  - (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size;

  - (UIImage *)imageByScalingAndCroppingForSize:(CGSize)targetSize;

  @end

  .m具体code

   代码如下:

  #import "UIImageExt.h"

  @implementation UIImage (UIImageExt)

  - (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{

  // 创建一个bitmap的context

  // 并把它设置成为当前正在使用的context

  UIGraphicsBeginImageContext(size);

  // 绘制改变大小的图片

  [img drawInRect:CGRectMake(0, 0, size.width, size.height)];

  // 从当前context中创建一个改变大小后的图片

  UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();

  // 使当前的context出堆栈

  UIGraphicsEndImageContext();

  // 返回新的改变大小后的图片

  return scaledImage;

  }

  - (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize

  {

  UIImage *sourceImage = self;

  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;

  }

  @end

  方法三:(本人项目中使用的方法)

   代码如下:

  -(UIImage *) imageCompressForWidth:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth

  {

  CGSize imageSize = sourceImage.size;

  CGFloat width = imageSize.width;

  CGFloat height = imageSize.height;

  CGFloat targetWidth = defineWidth;

  CGFloat targetHeight = (targetWidth / width) * height;

  UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight));

  [sourceImage drawInRect:CGRectMake(0,0,targetWidth, targetHeight)];

  UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  return newImage;

  }

  以上所述就是本文的全部内容了,希望大家能够喜欢。

时间: 2024-12-09 22:40:24

ios中图像进行压缩方法汇总的相关文章

ios中图像进行压缩方法汇总_IOS

方法一: 复制代码 代码如下: - (UIImage*)scaleFromImage:(UIImage*)image scaledToSize:(CGSize)newSize {  CGSize imageSize = image.size;  CGFloat width = imageSize.width;  CGFloat height = imageSize.height;        if (width <= newSize.width && height <= ne

php中的常用魔术方法汇总_php技巧

这篇文章详细的对php中的常用魔术方法进行了整理归纳,分享给大家供大家参考,具体内容如下 1.PHP把所有"__"开头的方法当做魔术方法,所以任何自定义的方法都不能是"__"开头 php提供的重载,是指动态的创建属性或方法.重载是通过魔术方法来实现的.这些魔术方法的参数不能饮用传递,__get(),__set(),__isset(),__unset(),实现类属性重载. 2.当访问类中不可访问的属性时,将调用__get()方法 3.当访问类中不可访问的属性时,根据不

C++中replace()函数使用方法汇总_C 语言

C++编程语言中的string应用方式多样化,每一种应用方式都能帮助我们提实现特定的功能需求.在这里我们将会为大家详细介绍一下其中一个比较重要的用法,有关C++ replace()函数的应用方式. basic_string::max_size C++ replace()函数返回string 能放的最大元素个数.(不同于capacity) size _ type max _ size( ) const; basic_string <char>::size_type cap, max; cap =

iOS获取网络类型的方法汇总_IOS

Reachability类只能区分WIFI和WWAN类型,却无法区分2G网和3G网. 网上也有些方法,却都存在Bug. 经过网上查找资料和测试,基本上总结了以下几种方法: 1.使用导航栏的方式:(私有API) 代码: 复制代码 代码如下: typedef enum {     NetWorkType_None = 0,     NetWorkType_WIFI,     NetWorkType_2G,     NetWorkType_3G, } NetWorkType; UIApplicatio

jQuery中常用的函数方法汇总

事件处理 ready(fn) 代码: $(document).ready(function(){ // Your code here... }); 作用:它可以极大地提高web应用程序的响应速度.通过使用这个方法,可以在DOM载入就绪能够读取并操纵时立即调用你所绑定的函数,而99.99%的JavaScript函数都需要在那一刻执行. bind(type,[data],fn) 代码: $("p").bind("click", function(){ alert( $(

iOS中 Apple开发相关邮箱汇总 韩俊强的博客

每周更新关注:http://weibo.com/hanjunqiang  新浪微博!手机加iOS开发者交流QQ群: 446310206 收集整理下来的邮箱列表,附上简单说明,希望对广大开发者有帮助:------------------------------------------------------------------------------------------------------- AppReview@apple.com-应用在提交后(处于"审核中"),应用和应用内

Java Web开发项目中中文乱码解决方法汇总_java

Java Web项目中,解决中文乱码方法总结如下 第一种情况:调用jsp页面中文显示乱码问题描述:通过浏览器调用jsp页面,在浏览器中显示的中文内容出现乱码. 解决方法:首先确认本jsp在编辑器中保存文件内容时,使用的是utf-8的编码格式,然后在jsp页面的开始处添加<%@ pageEncoding="utf-8"%>就可以解决这种中文乱码问题 第二种情况:调用servlet页面显示乱码问题描述:通过浏览器调用servlet,servlet在浏览器中显示的内容出现乱码.

javascript中定义类的方法汇总_基础知识

JS中定义类的方式有很多种: 1.工厂方式 复制代码 代码如下:   function Car(){    var ocar = new Object;    ocar.color = "blue";    ocar.doors = 4;    ocar.showColor = function(){     document.write(this.color)    };    return ocar;   }   var car1 = Car();   var car2 = Car

Powerpoint中插入FLV视频方法汇总

FLV视频与FLASH不一样的.全称是flash video,所用的播放器也不一样.在制作课件过程中,时常需要从网络上下载各种资源用以丰富课件内容,提升课堂效果.大部分是从优酷.土豆等视频网站下载FLV格式的视频文件,但却无法插入到我们常用的多媒体制作软件Powerpoint中.今天,我给一个学校做课件时遇到过这个问题,特把有关经验讲述一下,与大家分享在Powerpoint中实现播放FLV视频文件的成果. 链接指向法,简单易行 可以做个链接指向影片,点击链接可以跳出窗口播放该影片文件. 用Sho