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

2016-02-19 11:31 10 1 收藏

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是ios中图像进行压缩方法汇总,一起来学习了解下吧!

【 tulaoshi.com - 编程语言 】

方法一:

代码如下:

- (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 = (widthFactorheightFactor?widthFactor:heightFactor);
     
 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;
}

方法二:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

.h具体code
代码如下:

#import Foundation/Foundation.h 
@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 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

代码如下:

-(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;
}

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

来源:http://www.tulaoshi.com/n/20160219/1597758.html

延伸阅读
在图像的处理过程中经常需要对图像进行局部放大或其它处理操作,在VB中提供了一个非常实用的图像处理控件PictureClip,利用此控件可以方便的完成图像的局部放大或缩小操作。PictureClip控件的功能就是对一个原始位图进行剪裁,根据用户的需要可以有两种剪裁方法,第一种方法是确定固定的剪裁尺寸,通过确定横向与纵向的剪裁份数,控件均匀地把原始位图...
ios7冷门技巧汇总   1)Siri支持推文搜索 Siri现在支持搜索Twitter推文。 2)Siri支持男声 tuLaoShi.com你可以将Siri的声音切换成男声:设置通用Siri声音性别。 3)屏蔽特定手机号或联系人(www.tulaoshi.com) 你可以屏蔽来自特定手机号码的来电或者短信:设置手机屏蔽将号码或者通讯录里的联系人添加至屏...
标签: 电脑入门
FLV视频与FLASH不一样的。全称是flash video,所用的播放器也不一样。在制作课件过程中,时常需要从网络上下载各种资源用以丰富课件内容,提升课堂效果。大部分是从优酷、土豆等视频网站下载FLV格式的视频文件,但却无法插入到我们常用的多媒体制作软件Powerpoint中。今天,我给一个学校做课件时遇到过这个问题,特把有关经验讲述一下,与大家...
ios6.1.2完美越狱问题汇总 本次ios6.1.2完美越狱中会有很多果粉遇到很多未知的问题,这里我们收集一些大家在越狱中可能经常遇到的ios6.1.2完美越狱问题以供大家参考! 出现错误20、21、34、37 请暂时关闭安全或者杀毒软件。尝试清除hosts文件,重启后看是否正常 为什么我ios6.1.2越狱之后某个图标是白色的? 请尝试...
标签: 服务器
在VMware虚拟机中DiskGenius对虚拟机磁盘进行压缩 使用虚拟机的用户是否感觉到您的虚拟磁盘文件越来越大,都快把宝贵的磁盘空间(宿主机物理硬盘)占满了呢? 有人会想到,我直接启动虚拟机,然后把里面没用的数据删除了,不就行了吗?实际测试发现,这样删除后,存放在物理硬盘上的虚拟磁盘文件的大小并没有减小。虚拟机磁盘文件只会慢...

经验教程

523

收藏

23
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部