下面的例子是一个ios图片压缩的简单示例函数。可以压缩图片的分辨率和质量
在工程里新建category:UIImage+Compress, 拷贝以下代码到对应的文件。
UIImage+Compress.h文件
#import <Foundation/Foundation.h> @interface UIImage (Compress) /** * @description 按分辨率和质量压缩图片 * @param newSize 压缩到的分辨率 * @param quality 压缩到的质量 * @return image data */ - (NSData *)dataByCompressToSize:(CGSize)size toQuality:(CGFloat)quality; /** * @description 按分辨率和质量压缩图片 * @param newSize 压缩到的分辨率 * @param quality 压缩到的质量 * @return image */ - (UIImage *)imageByCompressToSize:(CGSize)size toQuality:(CGFloat)quality; /** * @description 按分辨率比例和质量压缩图片 * @param scale 压缩到的分辨率比例 * @param quality 压缩到的质量 */ - (NSData *)dataByCompressToScale:(CGFloat)scale toQuality:(CGFloat)quality; /** * @description 按分辨率比例和质量压缩图片 * @param scale 压缩到的分辨率比例 * @param quality 压缩到的质量 */ - (UIImage *)imageByCompressToScale:(CGFloat)scale toQuality:(CGFloat)quality; @end
UIImage+Compress.m文件
#import "UIImage+Compress.h" #import <ImageIO/ImageIO.h> @implementation UIImage (Compress) - (NSData *)dataByCompressToSize:(CGSize)size toQuality:(CGFloat)quality { UIImage *compressedImage = self; if (!CGSizeEqualToSize(size, CGSizeZero)) { UIGraphicsBeginImageContext(size); [self drawInRect:CGRectMake(0, 0, size.width, size.height)]; compressedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } if (quality == 1) { return UIImagePNGRepresentation(compressedImage); } else { return UIImageJPEGRepresentation(compressedImage, quality); } } - (UIImage *)imageByCompressToSize:(CGSize)size toQuality:(CGFloat)quality { UIImage *compressedImage = self; if (!CGSizeEqualToSize(size, CGSizeZero)) { UIGraphicsBeginImageContext(size); [self drawInRect:CGRectMake(0, 0, size.width, size.height)]; compressedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } if (quality == 1) { return compressedImage; } else { return [UIImage imageWithData:UIImageJPEGRepresentation(compressedImage, quality)]; } } - (NSData *)dataByCompressToScale:(CGFloat)scale toQuality:(CGFloat)quality { return [self dataByCompressToSize:CGSizeMake(self.size.width * scale, self.size.height * scale) toQuality:quality]; } - (UIImage *)imageByCompressToScale:(CGFloat)scale toQuality:(CGFloat)quality { return [self imageByCompressToSize:CGSizeMake(self.size.width * scale, self.size.height * scale) toQuality:quality]; } @end
首先需要引入**BitmapUtils**类。
import com.alibaba.sdk.android.media.utils.BitmapUtils
通过指定文件的路径filePath,设置压缩分辨率width和height,并指定压缩的质量quality,完成文件压缩。如下所示:
byte[] BitmapUtils.getSmallBitmapBytes(String filePath, int width, int height, int quality)
设置压缩分辨率width和height,将图片数据byte[]压缩到Bitmap。
Bitmap BitmapUtils.createBitmap(byte[] data, int maxWidh, int maxHeight)
将Bitmap对象转换成byte[]。
byte[] BitmapUtils.toBytes(Bitmap bm)
设置压缩的质量quality,将Bitmap压缩到Bitmap。
Bitmap BitmapUtils.compressBitmap(Bitmap bitmap, int compress)