(0031) iOS 开发之图片压缩
来源:互联网 发布:数据质量责任追究制度 编辑:程序博客网 时间:2024/06/15 19:10
1. Aspect单词的, 都会按照图片的宽高比来拉伸.这样会显示不全照片
2. Scale单词的,都会对图片进行拉伸(缩放);
3. 没有出现Scale单词的,都不会对图片进行拉伸;
UIViewContentModeScaleToFill
http://blog.csdn.net/iotjin/article/details/49159537
// 图片压缩,因为原图都是很大的,不必要传原图
UIImage *scaleImage = [self scaleImage:originImage toScale:0.3];
// 以下这两步都是比较耗时的操作,最好开一个HUD提示用户,这样体验会好些,不至于阻塞界面
if (UIImagePNGRepresentation(scaleImage) == nil) {
// 将图片转换为JPG格式的二进制数据
data = UIImageJPEGRepresentation(scaleImage, 1);
} else {
// 将图片转换为PNG格式的二进制数据
data = UIImagePNGRepresentation(scaleImage);
}
// 将二进制数据生成UIImage
UIImage *image = [UIImage imageWithData:data];
- (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize
{ UIGraphicsBeginImageContext(CGSizeMake(image.size.width*scaleSize,image.size.height*s caleSize));
[image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height *scaleSize)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
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;
} elseif (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;
}
— (UIImage *)compressImage:(UIImage *)image toMaxFileSize:(NSInteger)maxFileSize
{
CGFloat compression =0.9f;
CGFloat maxCompression =0.1f;
NSData *imageData = UIImageJPEGRepresentation(image, compression);
while ([imageData length] > maxFileSize && compression > maxCompression) {
compression -= 0.1;
imageData = UIImageJPEGRepresentation(image, compression);
}
UIImage *compressedImage = [UIImage imageWithData:imageData];
return compressedImage;
}
// 压缩图片到指定文件大小
// @param image:目标图片 size目标大小:(最大值)@return 返回的图片文件
+ (NSData *)compressOriginalImage:(UIImage *)image toMaxDataSizeKBytes:(CGFloat)size
{
NSData *data = UIImageJPEGRepresentation(image, 1.0);
CGFloat dataKBytes = data.length/1000.0;
CGFloat maxQuality = 0.9f;
CGFloat lastData = dataKBytes;
while (dataKBytes > size && maxQuality > 0.01f) {
maxQuality = maxQuality - 0.01f;
data = UIImageJPEGRepresentation(image, maxQuality);
dataKBytes = data.length/1000.0;
if (lastData == dataKBytes) {
break;
} else {
lastData = dataKBytes;
}
}
return data;
}
采用了这个方法:
CGFloat scaleFloat = 0.6;
+ (UIImage *) scaleImage: (UIImage *)image scaleFactor:(float)scaleFloat
{
CGSize size = CGSizeMake(image.size.width * scaleBy, image.size.height * scaleBy);
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformScale(transform, scaleBy, scaleBy);
CGContextConcatCTM(context, transform);
// Draw the image into the transformed context and return the image
[image drawAtPoint:CGPointMake(0.0f, 0.0f)];
UIImage *newimg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newimg;
}
- (0031) iOS 开发之图片压缩
- iOS开发之压缩,上传图片
- iOS开发-图片压缩
- [IOS开发]图片压缩
- iOS开发之根据图片宽高等比例压缩图片
- iOS开发技巧之:iOS 视频图片压缩上传
- iOS开发技巧之:图片压缩成指定的大小
- IOS开发笔记--图片压缩
- iOS 图片上传之压缩
- iOS系列之---图片压缩
- iOS开发上传图片的压缩
- iOS开发探索-图片压缩处理
- ios 之 图片压缩 与剪切
- iOS程序猿之图片压缩
- iOS之图片压缩的方法
- web app 开发之图片压缩
- Android开发之---有关图片压缩
- iOS开发之压缩与解压文件
- Java List<Map<String, Object>>生成树
- iOS 为CollectionView的分区添加背景色
- 如何拆分pdf文件中的页面
- C++队列模板queue
- 形象理解python的lambda
- (0031) iOS 开发之图片压缩
- Android spannableStringBuilder用法整理,用来更改字体的样式
- 斐波拉契数列、汉诺塔,青蛙跳台阶
- 初识python(一)_快速改造,基础知识
- AndroidApp应用中的网络层设计
- 动态规划-最大子段和
- maven更新包问题
- 前端基础--html基础篇
- LeetCode 461. Hamming Distance