如何得到设置uiimage大小的大小

您所在的位置: >
UIImage-Resize,重新生成图片尺寸
UIImage-Resize,重新生成图片尺寸
基本介绍:
从摄像头 或者图片库获取图片后,显示出来,可以重新定义图片大小尺寸显示
This category allows you to resize an UIImage at a constraint size, or proportionally so that it fits in a given CGSize. This category defines the following methods :
-(UIImage*)resizedImageWithSize:(CGSize*)
-(UIImage*)resizedImageToFitInSize:(CGSize*)size resizeIfSmaller:(BOOL)resizeIfS
This methods takes correctly the imageOrientation / EXIF orientation into account.
Github下载
温馨提示:&&&&&&&本站转载的均为开源代码,版权归原作者所有,请遵守作者许可证协议。转载本站内容请注明出处:懒人ios代码库-
[相关浏览]
源码下载地址: 本地迅雷下载 github面板下载
图片的剪裁 旋转缩放等等 源码下载地址: 本地迅雷下载 github面板下载
又一个显示GIF 动画的类,左边的GIF苹果是内置文件,右边的跳绳红苹果是在线的gif图片加载的.使
ASMediaFocusManager给能够专注于任何缩略图图像通过一个简单的旋转。缩略图图像自动动画一个集
给图片添加不同的边框效果还有圆角.可以保存图片 可以从相机里面调出图片选择图片. 各种图
从摄像头 或者图片库获取图片后,显示出来,可以重新定义图片大小尺寸显示 使用方法 This cat当前访客身份:游客 [
吃地好、睡地好、身体好;玩地好、学地好、工作好; 你也好、我也好、大家好。
:引用来自“唐丽梅”的评论如果换成NSObject类呢?...
:引用来自“唐丽梅”的评论self.length 您的这个s...
:如果换成NSObject类呢?
:self.length 您的这个self,是什么东东?...
:引用来自“JasonBound”的评论 这个可以解决横屏...
:这个可以解决横屏显示的问题,但是有一个点要注意...
:引用来自“易颖”的评论请问正则表达式是怎么学的...
:请问正则表达式是怎么学的?
:困扰一天的问题在这里解决了,非常感谢!
今日访问:2
昨日访问:8
本周访问:323
本月访问:323
所有访问:50172
IOS 改变图片的大小
发表于2年前( 11:34)&&
阅读(2682)&|&评论()
0人收藏此文章,
一、改变size
- (UIImage *)image:(UIImage*)image byScalingToSize:(CGSize)targetSize {
UIImage *sourceImage =
UIImage *newImage =
UIGraphicsBeginImageContext(targetSize);
CGRect thumbnailRect = CGRectZ
thumbnailRect.origin = CGPointZ
thumbnailRect.size.width
= targetSize.
thumbnailRect.size.height = targetSize.
[sourceImage drawInRect:thumbnailRect];
newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newI
二、改变字节(多用于上传至服务器时)
UIKIT_EXTERN NSData *UIImagePNGRepresentation(UIImage *image);
UIKIT_EXTERN NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality);
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读IOS图片裁剪和小图看大图动画 - liulunet - 博客园
  IOS的UIImagePickerController可以让用户通过相机或者相册获取想要的图片,并且通过设置allowsEditing属性允许用户在选择了图片以后对图片进行裁剪。不过在某些时候会出现正方形的裁剪框没有适配图片的情况,如下图:
这时候裁剪得到的是一张长方形图片,并且图片尺寸与UIImagePickerController设置的maxWidth和maxHeight尺寸并不符合。例如一个高和宽比例为1:2的图片,设置裁剪的maxWidth和maxHeight均为100,裁剪框的范围类似于上面右边的图片,上下留空左右框住图片的边界。最终获取到的裁剪结果为一张宽为100高为200的长方形图片。
  现在需要一个图片裁剪器,能够自适应图片最窄边的裁剪,保证最终得到的图片为正方形。综合网上查询结果,决定做一个类似WP7系统自带的裁剪方案:一个固定的透明框在屏幕中央,周围留黑色遮罩,允许用户随意缩放和移动图片,不过图片的边界不会超出屏幕中的透明框。
  首先考虑裁剪框,需要固定在屏幕中间不动,并且周围是透明的遮罩,决定采用UIImageView显示一张图片在屏幕的最顶层。裁剪器在我这里实际的用途为裁剪头像,定义的标准为两种,720X720的高清头像和300X300的普通头像。因此透明框的大小我选择了300X300,在屏幕中居中。
&  为了实现图片的滑动和缩放,选择UIScrollView作为容器来装显示用户图片的ImageView。为了保证图片边界不超出裁剪框范围,需要根据图片的长宽来定义ScrollView的ContentSize,并适应缩放。代码中我重写了SourceImage的Set方法,在Set方法中适配好图片显示和ContentSize的大小。并且在缩放倍数上作限制,如果图片本身的最短边就不足720则禁止缩放,如果超过720则最大允许缩放到裁剪框内画面的实际大小为720大小。
ContentView要根据image的大小调整,保证图片不会超出裁剪框。ContentView过大和过小都会影响裁剪。
1 - (void)setSourceImage:(UIImage *)image{
if (sourceImage) {
[sourceImage release];
sourceImage =
sourceImage = [image retain];
[_imageview setImage:self.sourceImage];
CGFloat wh = sourceImage.size.width/sourceImage.size.
CGSize displayS
if (wh & 1) {//宽图
_imageContainer.maximumZoomScale = ((sourceImage.size.height / DEF_CUTSIZE & 1)&&(sourceImage.size.height / DEF_CUTSIZE)*(DEF_CUTSIZE/DEF_HDSIZE) & 1) ? (sourceImage.size.height / DEF_CUTSIZE)*(DEF_CUTSIZE/720) : 1;//设置放大倍数
isImgAvailable = (sourceImage.size.height*2 & DEF_CUTSIZE) ? NO : YES;//检查图片是否可用
displaySize = CGSizeMake(sourceImage.size.width*(DEF_CUTSIZE/sourceImage.size.height), DEF_CUTSIZE);
}else{//高图
_imageContainer.maximumZoomScale = ((sourceImage.size.width / DEF_CUTSIZE & 1)&&(sourceImage.size.width / DEF_CUTSIZE)*(DEF_CUTSIZE/DEF_HDSIZE) & 1) ? (sourceImage.size.width / DEF_CUTSIZE)*(DEF_CUTSIZE/720) : 1;//设置放大倍数
isImgAvailable = (sourceImage.size.width*2 & DEF_CUTSIZE) ? NO : YES;//检查图片是否可用
displaySize = CGSizeMake(DEF_CUTSIZE, sourceImage.size.height*(DEF_CUTSIZE/sourceImage.size.width));
_imageview.frame = CGRectMake(0, 0, displaySize.width, displaySize.height);
_imageContainer.contentSize = _imageview.frame.
_imageContainer.contentInset = UIEdgeInsetsMake((SCREEN_HEIGHT - DEF_CUTSIZE)/2, (SCREEN_WIDTH - DEF_CUTSIZE)/2, (SCREEN_HEIGHT - DEF_CUTSIZE)/2, (SCREEN_WIDTH - DEF_CUTSIZE)/2);
//让图片居中显示
_imageContainer.contentOffset = (wh&1) ? CGPointMake((displaySize.width - SCREEN_WIDTH)/2, _imageContainer.contentOffset.y) : CGPointMake(_imageContainer.contentOffset.x, (displaySize.height - SCREEN_HEIGHT)/2);
&  图片的拖动和缩放做好以后,剩下的就是裁剪了。裁剪方法是从网上抄来的代码,全网都在转载不知具体出处了。定义好裁剪区域的大小和起始坐标就可以得到裁剪完成的图片了。
1 CGPoint point = CGPointMake(_imageContainer.contentOffset.x + (SCREEN_WIDTH - DEF_CUTSIZE)/2, _imageContainer.contentOffset.y + (SCREEN_HEIGHT - DEF_CUTSIZE)/2);
CGRect imageRect = CGRectMake(point.x * (self.sourceImage.size.width / _imageview.frame.size.width), point.y * (self.sourceImage.size.height / _imageview.frame.size.height), DEF_CUTSIZE * (self.sourceImage.size.width / _imageview.frame.size.width), DEF_CUTSIZE * (self.sourceImage.size.height / _imageview.frame.size.height));
subImage = [self getImageFromImage:self.sourceImage subImageSize:imageRect.size subImageRect:imageRect];
6 //图片裁剪
7 -(UIImage *)getImageFromImage:(UIImage*) superImage subImageSize:(CGSize)subImageSize subImageRect:(CGRect)subImageRect {
CGSize subImageSize = CGSizeMake(WIDTH, HEIGHT); //定义裁剪的区域相对于原图片的位置
CGRect subImageRect = CGRectMake(START_X, START_Y, WIDTH, HEIGHT);
CGImageRef imageRef = superImage.CGI
CGImageRef subImageRef = CGImageCreateWithImageInRect(imageRef, subImageRect);
UIGraphicsBeginImageContext(subImageSize);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, subImageRect, subImageRef);
UIImage* returnImage = [UIImage imageWithCGImage:subImageRef];
UIGraphicsEndImageContext(); //返回裁剪的部分图像
return returnI
&  最后添加一个动画效果,模仿Path软件中看图片的动画,将裁剪框周围的遮罩渐变为全黑,只保留裁剪好的图片,最后裁剪好的图片逐渐缩小到显示头像的地方。为了实现这个效果,在裁剪器中添加一个CGRect属性,生成裁剪器时设置好返回头像位置的坐标和大小,采用UIView的animateWithDuration方法实现动画效果即可。
  在裁剪好了以后,头像位置显示的为300X300的小头像,因此增加一个查看720X720高清头像的方法。模仿Path查看图片的渐变动画效果,页面中头像以外的其他元素渐变至全黑,同时将头像放大到屏幕大小。实现方法为用一个新的Controller来显示头像变大变小的动画和展示大图,原页面的小头像仅响应点击。在presentViewController到新的Controller时会挡住原页面,为了实现半透明的渐变效果,需要设置原页面Controler的modalPresentionStyle属性为UIModalPresentationCurrentContext。新的Controller将实现进入和退出动画,在大图显示的时候点击屏幕执行退出动画。
AvatarHDViewController.h
CutPicTest
Created by liulu on 12-12-21.
Copyright (c) 2012年 liulu. All rights reserved.
9 #import "AvatarHDViewController.h"
10 #import "AppDelegate.h"
11 #import &QuartzCore/QuartzCore.h&
13 #define SCREEN_WIDTH 320
14 #define SCREEN_HEIGHT 480
16 @interface AvatarHDViewController ()
20 @implementation AvatarHDViewController
21 @synthesize avatarI
22 @synthesize beginR
23 @synthesize delegate;
25 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
isShowHDImg = NO;
self.view.backgroundColor = [UIColor clearColor];
_viewBg = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
[self.view addSubview:_viewBg];
[self.view sendSubviewToBack:_viewBg];
_viewBg.backgroundColor = [UIColor blackColor];
_viewBg.alpha = 0;
42 - (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
_avatarImgV = [[UIImageView alloc]init];
[self.view addSubview:_avatarImgV];
[_avatarImgV.layer setMasksToBounds:YES];
[_avatarImgV.layer setCornerRadius:6.0];
_avatarImgV.contentMode = UIViewContentModeScaleAspectF
55 -(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self enterAnimation];
60 - (void)dealloc{
[_avatarImgV release];
[super dealloc];
65 #pragma mark -
66 #pragma mark set
67 - (void)setAvatarImg:(UIImage *)img{
avatarImg =
[_avatarImgV setImage:self.avatarImg];
72 - (void)setBeginRect:(CGRect)rect{
beginRect =
_avatarImgV.frame = self.beginR
77 #pragma mark -
78 #pragma mark Animation
79 - (void)enterAnimation{
[UIView animateWithDuration:0.2 animations:^{
_viewBg.alpha = 1;
}completion:^(BOOL finished){
if (finished) {
[UIView animateWithDuration:0.5 animations:^{
_avatarImgV.frame = CGRectMake(0, (SCREEN_HEIGHT - SCREEN_WIDTH)/2, SCREEN_WIDTH, SCREEN_WIDTH);
_viewBg.alpha = 1;
}completion:^(BOOL finished){
if (finished) {
//添加手势
if (!_recognizer) {
_recognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeFromDownToUp)];
[_recognizer setNumberOfTapsRequired:1];
[_recognizer setNumberOfTouchesRequired:1];
[self.view addGestureRecognizer:_recognizer];
102 - (void)exitAnimation{
[UIView animateWithDuration:0.4 animations:^{
_avatarImgV.frame = self.beginR
}completion:^(BOOL finished){
if (finished) {
[UIView animateWithDuration:0.5 animations:^{
_viewBg.alpha = 0;
_avatarImgV.frame = self.beginR
}completion:^(BOOL finished){
if (self.delegate&&[self.delegate respondsToSelector:@selector(hiddenHDUserImg)]) {
[self.delegate hiddenHDUserImg];
119 - (void)handleSwipeFromDownToUp{
//移除手势
for (UITapGestureRecognizer* recognizer in self.view.gestureRecognizers) {
if (recognizer==_recognizer) {
[self.view removeGestureRecognizer:recognizer];
[self exitAnimation];
129 - (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
最终效果:
  因为设计的时候考虑不足,在真机上拍照以后可能出现裁剪得到的图片与裁剪框中不同的问题,这是因为ios的相机并没有根据拍照时的重力方向来将图片实际旋转,而是采用了写入图片EXIF信息的方式确保图片显示方向正确。因此在裁剪图片时还需要根据从相册获取到的UIImage对象的imageOrientation来重新计算正确的裁剪坐标和区域才能得到正确的图像。
  最终我的这个裁剪器还是没有在实际当中使用,原因是为了适配高清图片,在图片最小边不足720时我直接禁止用户放大了,导致用户体验非常不好。而应用在设置头像的场景中时很多时候对于一张照片用户确实就只想截取其中的某个区域作为头像,而用户很少会在意头像是否是绝对的高清。并且300的尺寸和720的尺寸在大部分手机屏幕上实际上看起来差别并不大。设计时更应该全面考虑实际应用情况,720的分辨率只应该作为高清头像的一个上限标准,而不该强制用户使用720分辨率头像。11402人阅读
Xcode-Storyboard-IOS 5.0(33)
直接上代码了 头文件
// 图片处理 0 半灰色
+(UIImage*)imageWithImage:(UIImage*)image grayLevelType:(UIImageGrayLevelType)
//色值 变暗多少 0.0 - 1.0
+(UIImage*)imageWithImage:(UIImage*)image darkValue:(float)darkV
获取网络图片的Size, 先通过文件头来获取图片大小
如果失败 会下载完整的图片Data 来计算大小 所以最好别放在主线程
如果你有使用SDWebImage就会先看下 SDWebImage有缓存过改图片没有
支持文件头大小的格式 png、gif、jpg
/bbs/read.php?tid=165823
+(CGSize)downloadImageSizeWithURL:(id)imageURL;
//讨厌警告
-(id)diskImageDataBySearchingAllPathsForKey:(id)key{}
+(CGSize)downloadImageSizeWithURL:(id)imageURL
NSURL* URL =
if([imageURL isKindOfClass:[NSURL class]]){
URL = imageURL;
if([imageURL isKindOfClass:[NSString class]]){
URL = [NSURL URLWithString:imageURL];
if(URL == nil)
return CGSizeZ
NSString* absoluteString = URL.absoluteS
#ifdef dispatch_main_sync_safe
if([[SDImageCache sharedImageCache] diskImageExistsWithKey:absoluteString])
UIImage* image = [[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:absoluteString];
if(!image)
NSData* data = [[SDImageCache sharedImageCache] performSelector:@selector(diskImageDataBySearchingAllPathsForKey:) withObject:URL.absoluteString];
image = [UIImage imageWithData:data];
return image.
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL];
NSString* pathExtendsion = [URL.pathExtension lowercaseString];
CGSize size = CGSizeZ
if([pathExtendsion isEqualToString:@&png&]){
[self downloadPNGImageSizeWithRequest:request];
else if([pathExtendsion isEqual:@&gif&])
[self downloadGIFImageSizeWithRequest:request];
size = [self downloadJPGImageSizeWithRequest:request];
if(CGSizeEqualToSize(CGSizeZero, size))
NSData* data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:URL] returningResponse:nil error:nil];
UIImage* image = [UIImage imageWithData:data];
#ifdef dispatch_main_sync_safe
[[SDImageCache sharedImageCache] storeImage:image recalculateFromImage:YES imageData:data forKey:URL.absoluteString toDisk:YES];
size = image.
+(CGSize)downloadPNGImageSizeWithRequest:(NSMutableURLRequest*)request
[request setValue:@&bytes=16-23& forHTTPHeaderField:@&Range&];
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if(data.length == 8)
int w1 = 0, w2 = 0, w3 = 0, w4 = 0;
[data getBytes:&w1 range:NSMakeRange(0, 1)];
[data getBytes:&w2 range:NSMakeRange(1, 1)];
[data getBytes:&w3 range:NSMakeRange(2, 1)];
[data getBytes:&w4 range:NSMakeRange(3, 1)];
int w = (w1 && 24) + (w2 && 16) + (w3 && 8) + w4;
int h1 = 0, h2 = 0, h3 = 0, h4 = 0;
[data getBytes:&h1 range:NSMakeRange(4, 1)];
[data getBytes:&h2 range:NSMakeRange(5, 1)];
[data getBytes:&h3 range:NSMakeRange(6, 1)];
[data getBytes:&h4 range:NSMakeRange(7, 1)];
int h = (h1 && 24) + (h2 && 16) + (h3 && 8) + h4;
return CGSizeMake(w, h);
return CGSizeZ
+(CGSize)downloadGIFImageSizeWithRequest:(NSMutableURLRequest*)request
[request setValue:@&bytes=6-9& forHTTPHeaderField:@&Range&];
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if(data.length == 4)
short w1 = 0, w2 = 0;
[data getBytes:&w1 range:NSMakeRange(0, 1)];
[data getBytes:&w2 range:NSMakeRange(1, 1)];
short w = w1 + (w2 && 8);
short h1 = 0, h2 = 0;
[data getBytes:&h1 range:NSMakeRange(2, 1)];
[data getBytes:&h2 range:NSMakeRange(3, 1)];
short h = h1 + (h2 && 8);
return CGSizeMake(w, h);
return CGSizeZ
+(CGSize)downloadJPGImageSizeWithRequest:(NSMutableURLRequest*)request
[request setValue:@&bytes=0-209& forHTTPHeaderField:@&Range&];
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if ([data length] &= 0x58) {
return CGSizeZ
if ([data length] & 210) {// 肯定只有一个DQT字段
short w1 = 0, w2 = 0;
[data getBytes:&w1 range:NSMakeRange(0x60, 0x1)];
[data getBytes:&w2 range:NSMakeRange(0x61, 0x1)];
short w = (w1 && 8) + w2;
short h1 = 0, h2 = 0;
[data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)];
[data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)];
short h = (h1 && 8) + h2;
return CGSizeMake(w, h);
short word = 0x0;
[data getBytes:&word range:NSMakeRange(0x15, 0x1)];
if (word == 0xdb) {
[data getBytes:&word range:NSMakeRange(0x5a, 0x1)];
if (word == 0xdb) {// 两个DQT字段
short w1 = 0, w2 = 0;
[data getBytes:&w1 range:NSMakeRange(0xa5, 0x1)];
[data getBytes:&w2 range:NSMakeRange(0xa6, 0x1)];
short w = (w1 && 8) + w2;
short h1 = 0, h2 = 0;
[data getBytes:&h1 range:NSMakeRange(0xa3, 0x1)];
[data getBytes:&h2 range:NSMakeRange(0xa4, 0x1)];
short h = (h1 && 8) + h2;
return CGSizeMake(w, h);
} else {// 一个DQT字段
short w1 = 0, w2 = 0;
[data getBytes:&w1 range:NSMakeRange(0x60, 0x1)];
[data getBytes:&w2 range:NSMakeRange(0x61, 0x1)];
short w = (w1 && 8) + w2;
short h1 = 0, h2 = 0;
[data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)];
[data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)];
short h = (h1 && 8) + h2;
return CGSizeMake(w, h);
return CGSizeZ
download url://&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:196366次
积分:2441
积分:2441
排名:第9038名
原创:48篇
评论:165条
(1)(1)(1)(1)(1)(1)(1)(1)(1)(2)(1)(2)(2)(1)(1)(4)(2)(2)(2)(1)(1)(1)(1)(2)(1)(2)(1)(1)(2)(2)(3)(4)如何得到UIImage的大小_百度知道
如何得到UIImage的大小
提问者采纳
  width * height * bitsPerPixel / 8
bitsPerPixel可以用CGImage的 CGImageGetBitsPerPixel 函数获取,  大部分情况下BPP默认是 32 Bit    祝你愉快,满意请采纳哦
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 uiimage设置图片大小 的文章

 

随机推荐