当前位置: 移动技术网 > IT编程>移动开发>IOS > ios中图像进行压缩方法汇总

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

专门玩中老年妇女,前列腺专科,蒋文浩

方法一:

复制代码 代码如下:

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • ios uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网