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;
}
以上所述就是本文的全部内容了,希望大家能够喜欢。
上一篇: ios动态设置lbl文字标签的高度
下一篇: 仿iOS图标抖动