注册 登录
主题 : 每日分享 - 图像压缩成指定大小(高度/宽度)
级别: 精灵王

UID: 6349
精华: 2
发帖: 123
可可豆: 11179 CB
威望: 11179 点
在线时间: 1002(时)
注册时间: 2009-06-14
最后登录: 2018-09-11
0 楼:  发表于: 2010-05-15 00:27    发自: Web Page

每日分享 - 图像压缩成指定大小(高度/宽度)    (在iOS代码库中浏览本帖)


复制代码
  1. #import <Foundation/Foundation.h>
  2. @interface UIImage (UIImageExt)
  3. - (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize;
  4. @end



复制代码
  1. #import "UIImageExt.h"
  2. @implementation UIImage (UIImageExt)
  3. - (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize
  4. {
  5.     UIImage *sourceImage = self;
  6.     UIImage *newImage = nil;      
  7.     CGSize imageSize = sourceImage.size;
  8.     CGFloat width = imageSize.width;
  9.     CGFloat height = imageSize.height;
  10.     CGFloat targetWidth = targetSize.width;
  11.     CGFloat targetHeight = targetSize.height;
  12.     CGFloat scaleFactor = 0.0;
  13.     CGFloat scaledWidth = targetWidth;
  14.     CGFloat scaledHeight = targetHeight;
  15.     CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
  16.     
  17.     if (CGSizeEqualToSize(imageSize, targetSize) == NO)
  18.     {
  19.         CGFloat widthFactor = targetWidth / width;
  20.         CGFloat heightFactor = targetHeight / height;
  21.         
  22.         if (widthFactor > heightFactor)
  23.             scaleFactor = widthFactor; // scale to fit height
  24.         else
  25.             scaleFactor = heightFactor; // scale to fit width
  26.         scaledWidth  = width * scaleFactor;
  27.         scaledHeight = height * scaleFactor;
  28.         
  29.         // center the image
  30.         if (widthFactor > heightFactor)
  31.         {
  32.             thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
  33.         }
  34.         else
  35.             if (widthFactor < heightFactor)
  36.             {
  37.                 thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
  38.             }
  39.     }      
  40.     
  41.     UIGraphicsBeginImageContext(targetSize); // this will crop
  42.     
  43.     CGRect thumbnailRect = CGRectZero;
  44.     thumbnailRect.origin = thumbnailPoint;
  45.     thumbnailRect.size.width  = scaledWidth;
  46.     thumbnailRect.size.height = scaledHeight;
  47.     
  48.     [sourceImage drawInRect:thumbnailRect];
  49.     
  50.     newImage = UIGraphicsGetImageFromCurrentImageContext();
  51.     if(newImage == nil)
  52.         NSLog(@"could not scale image");
  53.     
  54.     //pop the context to get back to the default
  55.     UIGraphicsEndImageContext();
  56.     return newImage;
  57. }
  58. @end

新浪微博 weibo.com/pipipeng
Twitter: qqn_pipi
级别: 圣骑士

状态: 连续签到 - [2天]
UID: 4787
精华: 1
发帖: 97
可可豆: 7672 CB
威望: 7660 点
在线时间: 362(时)
注册时间: 2009-04-16
最后登录: 2018-10-18
1 楼:  发表于: 2010-05-15 01:12    发自: Web Page
       谢谢分享。
级别: 侠客
UID: 10431
精华: 0
发帖: 73
可可豆: 685 CB
威望: 685 点
在线时间: 154(时)
注册时间: 2009-11-06
最后登录: 2013-06-28
2 楼:  发表于: 2010-08-18 11:11    发自: Web Page
标记~一个~~谢谢分享
级别: 精灵王
UID: 10786
精华: 0
发帖: 494
可可豆: 4867 CB
威望: 4867 点
在线时间: 442(时)
注册时间: 2009-11-19
最后登录: 2015-03-09
3 楼:  发表于: 2010-08-19 11:04    发自: Web Page
收藏之 呼呼
空间地址,有空来做做哈:http://hi.baidu.com/%E9%9A%8F%E9%A3%8E_1989/home
级别: 新手上路
UID: 23247
精华: 0
发帖: 6
可可豆: 60 CB
威望: 60 点
在线时间: 30(时)
注册时间: 2010-06-27
最后登录: 2013-11-27
4 楼:  发表于: 2010-08-25 10:53    发自: Web Page
看起来不错,有时间研究一下,谢谢分享
级别: 精灵王
UID: 16362
精华: 0
发帖: 528
可可豆: 5262 CB
威望: 5262 点
在线时间: 1062(时)
注册时间: 2010-03-29
最后登录: 2016-01-15
5 楼:  发表于: 2010-08-25 12:00    发自: Web Page
标记一下就好了
级别: 新手上路
UID: 22879
精华: 0
发帖: 14
可可豆: 140 CB
威望: 140 点
在线时间: 20(时)
注册时间: 2010-06-23
最后登录: 2016-03-27
6 楼:  发表于: 2010-08-31 16:15    发自: Web Page
我的代码阅读笔记

1、创建UIImage的类别,添加图像压缩指定大小方法 imageByScalingAndCroppingForSize:(CGSize)targetSize; 此方法传入一个压缩图像大小以后的高度和宽度。(第一部分代码)
2、实现UIImageExt类别,初始化图像缩放默认值。(9-19)
3、然后检查是否需要进行图像缩放。(21)
4、如果需要缩放,则计算先分别计算高度、宽度的因子。(23-24)
5、选择因子系数最大的一边作为图像的缩放因子。(26-29)
6、根据前面得到的图像缩放因子得到缩放图像的等比例高度和宽度值。(30-31)
7、由于是按照最大系数一边进行缩放,造成其中另外一边会出现空白,所以需要计算出另外一边居中显示的坐标值。(34-42)
8、最后根据最新合成的Origin和Size在画布完成内容绘制。(45-52)
9、保存为UIImage对象。(54-56)
10、关闭画图,返回UIImage对象。(59-60)
级别: 禁止发言
UID: 30630
精华: 0
发帖: 566
可可豆: 5201 CB
威望: 5201 点
在线时间: 1955(时)
注册时间: 2010-09-14
最后登录: 2017-12-08
7 楼:  发表于: 2010-10-03 17:37    发自: Web Page
用户被禁言,该主题自动屏蔽!
级别: 新手上路
UID: 24124
精华: 0
发帖: 8
可可豆: 80 CB
威望: 80 点
在线时间: 62(时)
注册时间: 2010-07-08
最后登录: 2010-11-15
8 楼:  发表于: 2010-10-09 11:47    发自: Web Page
压缩图片,学习。。。。
级别: 侠客
状态: 连续签到 - [3天]
UID: 23185
精华: 0
发帖: 140
可可豆: 1317 CB
威望: 1311 点
在线时间: 744(时)
注册时间: 2010-06-26
最后登录: 2015-05-14
9 楼:  发表于: 2010-11-02 12:23    发自: Web Page
收藏备用 6L同学笔记很到位

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部