欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-03-02 15:05:22
方法一: 复制代码 代码如下: - (uiimage*)scalefromimage:(uiimage*)image scaledtosize:(cgsize)news...

方法一:

复制代码 代码如下:

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

方法二:

.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 

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

复制代码 代码如下:

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

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