Chinaunix首页 | 论坛 | 博客
  • 博客访问: 306469
  • 博文数量: 53
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 325
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-14 22:50
文章分类

全部博文(53)

文章存档

2014年(15)

2013年(38)

我的朋友

分类: iOS平台

2014-03-26 11:46:54

在ios的开发中,会经常遇到处理图片的问题,所以我提供了一个可以根据比例、大小进行压缩图片的方法,代码如下
A,//传入的参数:1、生成图片的大小 2、压缩比 3、存放图片的路径
+ (void)createThumbImage:(UIImage *)image size:(CGSize )thumbSize percent:(float)percent toPath:(NSString *)thumbPath{
        CGSize imageSize = image.size;
     CGFloat width = imageSize.width;
     CGFloat height = imageSize.height;
        CGFloat scaleFactor = 0.0;
     CGPoint thumbPoint = CGPointMake(0.0,0.0);
     CGFloat widthFactor = thumbSize.width / width;
     CGFloat heightFactor = thumbSize.height / height;
     if (widthFactor > heightFactor)  {
       scaleFactor = widthFactor;
     }
     else {
       scaleFactor = heightFactor;
     }
     CGFloat scaledWidth  = width * scaleFactor;
     CGFloat scaledHeight = height * scaleFactor;
     if (widthFactor > heightFactor)
     {
       thumbPoint.y = (thumbSize.height - scaledHeight) * 0.5; 
     }
     else if (widthFactor < heightFactor)
     {
       thumbPoint.x = (thumbSize.width - scaledWidth) * 0.5;
     }
      UIGraphicsBeginImageContext(thumbSize);
     CGRect thumbRect = CGRectZero;
     thumbRect.origin = thumbPoint;
     thumbRect.size.width  = scaledWidth;
     thumbRect.size.height = scaledHeight;
     [image drawInRect:thumbRect];
   
     UIImage *thumbImage = UIGraphicsGetImageFromCurrentImageContext();
     UIGraphicsEndImageContext();
    NSData *thumbImageData = UIImageJPEGRepresentation(thumbImage, percent);
     [thumbImageData writeToFile:thumbPath atomically:NO];
}
B,下面的这个方法适用于 对压缩后的图片的质量要求不高或者没有要求,因为这种方法只是压缩了图片的大小
+(UIImage *)scale:(UIImage *)image toSize:(CGSize)size
{
    UIGraphicsBeginImageContext(size);
    [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return scaledImage;
}
C,
//压缩图片
+ (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize
{
    // Create a graphics image context
    UIGraphicsBeginImageContext(newSize);
    // Tell the old image to draw in this new context, with the desired
    // new size
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    // Get the new image from the context
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    // End the context
    UIGraphicsEndImageContext();
    // Return the new image.
    return newImage;
}
 
cell.typeImageView.imageURL = [NSURL URLWithString:@""];
    NSData  *data = UIImagePNGRepresentation(cell.typeImageView.image);
    NSLog(@"--==== data ==  %d", data.length);
    cell.typeImageView.image = [UnityClass imageWithImageSimple:cell.typeImageView.image scaledToSize:CGSizeMake(80, 80)];
    NSData  *data1 = UIImagePNGRepresentation(cell.typeImageView.image);
    NSLog(@"--==== data1 ==  %d", data1.length);
通过打印NSData压缩前后的长度来看是否压缩.

这段“许靖昕”先生分享的代码将示范如何缩小 UIImage
    .    @implementation UIImage (Extras) 
    .    #pragma mark 
    .    #pragma mark Scale and crop image 
    .    - (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; 
    .    } 

最简单的加载网络图片的方法:
用NSData。
NSString* URL = @"http://www.cocoachina.com/bbs/images/post/smile/default/13.gif";
NSData* imageData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:mapURL]];
UIImage* image = [[UIImage alloc] initWithData:imageData];
[imageView setImage:image];
[imageData release];
[image release]; 

阅读(1547) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~