`
zcw_java
  • 浏览: 303041 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

UIImage压缩和缩放

 
阅读更多
节省大量内存,重绘缩略图;

#define K_contentsOfFile(fileName,fileType) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fileName ofType:fileType]]

3种方法,分别是调整、居中、填充方式。

1、等比例缩放。需要根据图像的长宽比在其四周留出一些额外区域,用透明像素为图像消关
+ (CGSize) fitSize: (CGSize)thisSize inSize: (CGSize) aSize
{
    CGFloat scale;
    CGSize newsize = thisSize;
   
    if (newsize.height && (newsize.height > aSize.height))
    {
        scale = aSize.height / newsize.height;
        newsize.width *= scale;
        newsize.height *= scale;
    }
   
    if (newsize.width && (newsize.width >= aSize.width))
    {
        scale = aSize.width / newsize.width;
        newsize.width *= scale;
        newsize.height *= scale;
    }
   
    return newsize;
}
2、抽取部分图像来匹配可用空间。并裁剪掉落在像素区外的任何元素。
//返回调整的缩略图
+ (UIImage *) image: (UIImage *) image fitInSize: (CGSize) viewsize
{
    // calculate the fitted size
    CGSize size = [ImageHelper fitSize:image.size inSize:viewsize];
   
    UIGraphicsBeginImageContext(viewsize);

    float dwidth = (viewsize.width - size.width) / 2.0f;
    float dheight = (viewsize.height - size.height) / 2.0f;
   
    CGRect rect = CGRectMake(dwidth, dheight, size.width, size.height);
    [image drawInRect:rect];
   
    UIImage *newimg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext(); 
   
    return newimg; 
}
3、通过匹配可用空间的长度和宽度来填充图像。每个像素都被使用,但是图像将水平或垂直裁剪。
//返回居中的缩略图
+ (UIImage *) image: (UIImage *) image centerInSize: (CGSize) viewsize
{
    CGSize size = image.size;
   
    UIGraphicsBeginImageContext(viewsize);
    float dwidth = (viewsize.width - size.width) / 2.0f;
    float dheight = (viewsize.height - size.height) / 2.0f;
   
    CGRect rect = CGRectMake(dwidth, dheight, size.width, size.height);
    [image drawInRect:rect];
   
    UIImage *newimg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext(); 
   
    return newimg; 
}

//返回填充的缩略图
+ (UIImage *) image: (UIImage *) image fillSize: (CGSize) viewsize

{
    CGSize size = image.size;
   
    CGFloat scalex = viewsize.width / size.width;
    CGFloat scaley = viewsize.height / size.height;
    CGFloat scale = MAX(scalex, scaley);   
   
    UIGraphicsBeginImageContext(viewsize);
   
    CGFloat width = size.width * scale;
    CGFloat height = size.height * scale;
   
    float dwidth = ((viewsize.width - width) / 2.0f);
    float dheight = ((viewsize.height - height) / 2.0f);
   
    CGRect rect = CGRectMake(dwidth, dheight, size.width * scale, size.height * scale);
    [image drawInRect:rect];
   
    UIImage *newimg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext(); 
   
    return newimg; 
}

//相对比较简单的压缩
- (UIImage *)image:(UIImage *)image centerInSize:(CGSize)viewsize
{
UIGraphicsBeginImageContext(CGSizeMake(viewsize.width, viewsize.height));
[image drawInRect:CGRectMake(0, 0, viewsize.width, viewsize.height)];
UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
   
return reSizeImage;
}


测试

NSDictionary *cate = [self.cates objectAtIndex:indexPath.row];
    UIImage *img1 = [UIImage imageNamed:[[cate objectForKey:@"imageName"] stringByAppendingString:@".jpg"]];
    NSData *data1 = UIImageJPEGRepresentation(img1, 1.0);
    NSLog(@"data1 = %d",data1.length);
    UIImage *img2 = [self image:[UIImage imageNamed:[[cate objectForKey:@"imageName"] stringByAppendingString:@".png"]] centerInSize:CGSizeMake(140, 140)];
    NSData *data2 = UIImageJPEGRepresentation(img2, 1.0);
    NSLog(@"data2 = %d",data2.length);


打印:
2013-07-01 14:04:03.194 Abviewer_iPhone[8829:907] data1 = 288658
2013-07-01 14:04:03.198 Abviewer_iPhone[8829:907] data2 = 859
分享到:
评论

相关推荐

    iOS应用开发中对UIImage进行截取和缩放的方法详解

    缩放分为两种常见的类型:指定大小缩放和等比缩放。指定大小缩放是指将图片强制调整到特定尺寸,可能会改变图片的原始比例。等比缩放则保持图片的比例,防止拉伸或压缩。 对于指定大小缩放,我们可以使用以下代码:...

    几个iphone uiimage resize 的类

    在iOS开发中,UIImage是用于显示和操作图像的核心类。`UIImage`提供了许多功能,包括加载、绘制、裁剪和调整图像大小等。在iPhone应用中,由于屏幕尺寸和性能考虑,经常需要对UIImage对象进行尺寸调整,以确保图片在...

    swift-UIImage的一些Categories方便开发

    对于图像处理和展示,UIImage类是不可或缺的一部分。为了提升开发效率和代码可读性,开发者常常会使用Categories来扩展UIImage的功能。"swift-UIImage的一些Categories方便开发"这个项目就是针对这个需求而创建的,...

    上传图片压缩

    1. iOS图片处理:UIImage类的使用,以及如何通过CGImageRef和CGAffineTransform进行图片缩放和裁剪。 2. 图片压缩:JPEG和PNG编码原理,通过调整编码质量来控制图片数据大小。 3. Objective-C类别:如何使用类别扩展...

    ios图片上传服务器前的压缩处理

    这两个内置函数分别用于将UIImage对象转换为JPEG和PNG格式的数据,同时可以接受一个质量参数(0.0-1.0),值越小,压缩比越高,文件越小,但图像质量也会下降。 3. **AVFoundation框架** 对于更复杂的图像处理...

    swift-SSJImage-Scan图片压缩和二维码生成or扫描二维码

    SSJImage-Scan可能在此基础上进行更高效的优化,例如按比例缩放图片后再进行压缩。 ### 2. 二维码生成 二维码是一种二维条形码,可以存储大量信息,如网址、文本、联系人信息等。Swift-SSJImage-Scan库提供了便捷...

    对于图片的处理,包括裁图,缩放等图片的处理

    `UIImageJPEGRepresentation(image, compressionQuality)`和`UIImagePNGRepresentation(image)`可以将UIImage转换为JPEG或PNG数据,通过调整`compressionQuality`参数可以控制压缩程度,从而生成不同大小的缩略图。...

    swift-iOS开发中将视频文件转换为gif图并设置gif压缩尺寸

    这可以通过在创建`UIImage`时设置`scale`属性或者在合成GIF时对帧进行缩放实现。 5. **压缩GIF**:为了减小文件大小,我们还需要进行GIF的压缩。可以使用`UIImage`的`JPEGRepresentation`方法先将每一帧转为JPEG,...

    ios图片压缩处理

    苹果提供了如`UIImage`类的API来处理这些操作,我们可以利用`initWithData:`初始化方法加载图片数据,然后通过`imageWithCGImage:scale:orientation:`创建适合视图的缩放版本。 图片分类通常指的是如何组织和管理...

    UIImageHEIC:添加熟悉的HEIC编码的UIImage类别

    3. 对加载的UIImage对象进行处理,如缩放、裁剪等。 4. 使用分类的方法保存处理后的图像为HEIC格式,如`- (BOOL)writeToFileHEIC:(NSString *)path atomically:(BOOL)atomically`。 需要注意的是,虽然HEIC提供了更...

    iOS图片预处理压缩防止卡顿

    6. **使用UIImage的imageWithContentMode:scale:orientation:**方法:这可以让你控制图片的显示模式、缩放比例和方向,从而避免因为图片方向问题造成额外的计算和内存消耗。 7. **自适应加载**:根据设备的屏幕像素...

    iOS中大尺寸图片的旋转与缩放实例详解

    通过使用Core Image滤镜进行旋转,以及智能地缩放和裁剪图像,我们可以高效地处理这些任务,同时确保应用的稳定性和性能。在实际开发中,根据具体需求选择合适的方法,并结合性能优化策略,可以进一步提高用户体验。

    ios应用源码之调整图片大小长宽的组件 20181210

    - 在上传图片时,先压缩图片可以减少服务器压力和用户流量。 - 在生成缩略图或预览图时,这个组件能快速生成合适大小的图片。 7. **注意事项** - 调整图片尺寸可能导致图像质量损失,需要合理设置缩放参数以保持...

    详解IOS图片压缩处理

    在iOS开发中,图片压缩处理是一项常见的需求,特别是在优化应用性能和减少数据传输量时显得尤为重要。本文将深入探讨两种主要的图片压缩方法——“压”和“缩”,以及如何在实践中有效地应用它们。 首先,我们需要...

    swift3.0开发框架

    1. **使用UIImage的缩放功能**:Swift 3.0中的UIImage类提供了一种简单的方式来调整图像大小,从而间接实现压缩。通过设置image的尺寸,可以将图像缩小到适合显示或存储的大小,减少文件体积。例如: ```swift let ...

    image的操作

    它提供了加载、显示、缩放和裁剪图像的基本功能。在iOS应用中,我们通常使用UIImage来展示用户界面中的图片,如应用图标、背景图像或者用户上传的照片。 UIImage-Categories-master是一个代码库,包含了对UIImage类...

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

    1. UIImageJPEGRepresentation:此函数接受一个UIImage对象和一个介于0.0到1.0之间的压缩质量参数。值越接近1.0,压缩质量越高,文件大小也越大;值越接近0.0,压缩质量越低,文件大小越小。例如,可以这样使用: ``...

    ios-WCLPictureClippingRotation.zip

    在iOS开发中,图片处理是一项常见的任务,尤其是涉及到用户交互的图像编辑,如旋转、缩放和比例压缩图片裁剪。这些功能对于照片编辑应用或者任何需要用户自定义图像显示的应用来说至关重要。"ios-...

    仿微信发朋友圈选择图片

    这需要对图片缩放、裁剪等操作有一定了解,比如Android的`BitmapFactory.Options`的缩放策略,iOS的`UIImage`的缩放方法。 4. 图片处理: - **图片压缩**:为了减少上传时间和节省服务器存储空间,图片通常需要...

Global site tag (gtag.js) - Google Analytics