怎么获得uiimage 缩放的大小

2520人阅读
UIImageView& *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0,45.0,300,300)];
imageView.image = [UIImage imageNamed:@&a.png&];//加载入图片
[self.view addSubView:image];
[imageView release];
//imageNamed方法是不能通过路径进行加载图片的,此方式容易引起发生内存警告从而导致自动退出的问题。
//最好是通过直接读取文件路径[UIImage imageWithContentsOfFile]解决掉这个问题.
NSImage *image = [[NSImage alloc]initWithContentsOfURL:(NSURL *)];
NSImage *image = [[NSImage alloc]initWithContentsOfFile:(NSString *)];
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@&http://farm4./504_a88b69c9de.jpg&]]];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
NSString *path = [[NSBundle mainBundle]pathForResource:@”icon”ofType:@”png”];
NSImage *myImage = [UIImage imageWithContentsOfFile:path];
//让一个UIImageView响应点击事件
UIImageView&*imgView =[[UIImageView&alloc]&initWithFrame:CGRectMake(0,&0,320,&44)];
imgView.userInteractionEnabled=YES;
UITapGestureRecognizer&*singleTap =[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(onClickImage)];
[imgView&addGestureRecognizer:singleTap];
[singleTap&release];
-(void)onClickImage{
& &// here, do whatever you wantto do
& &&NSLog(@&imageview is clicked!&);
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:149213次
积分:2158
积分:2158
排名:第6596名
原创:63篇
转载:114篇
评论:11条
(2)(6)(7)(8)(3)(3)(2)(16)(2)(3)(1)(3)(1)(6)(6)(10)(5)(13)(8)(1)(3)(6)(9)(3)(10)(2)(2)(16)(10)(10)UIImageView自适应图片大小 - 好工具站长分享平台
UIImageView自适应图片大小
窗口大小获取: & &
CGRect screenBounds = [ [UIScreenmainScreen]bounds];//返回的是带有状态栏的Rect
CGRect rect = [ [UIScreenmainScreen]applicationFrame];//不包含状态栏的Rect
UIImageView:
一 :圆角以及自适应图片大小
& &UIImage* image = [UIImage imageNamed:@"image.png"];
& &UIImageView* imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
& &imageView.frame = CGRectMake(0, 0, 300, 200);
& &imageView.layer.cornerRadius = 8; && &imageView.layer.masksToBounds = YES;
& & //自适应图片宽高比例&&& imageView1.contentMode = UIViewContentModeScaleAspectF
二 图片自适应UIImageView (来源于:http://www.61ic./Mobile//36.)
- (UIImage&*)rescaleImageToSize:(CGSize)size&{
CGRect&rect =&CGRectMake(0.0,&0.0,&size.width,&size.height);
UIGraphicsBeginImageContext(rect.size);
[self&drawInRect:rect];&&// scales image to rect
UIImage&*resImage =&UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return&resI
- (UIImage*)imageByScalingAndCropForSize:(CGSize)targetS &&//图片缩放裁剪
- (UIImage*)transformWidth:(CGFloat)width &&&&&height:(CGFloat) //改变大小
+ (UIImage *)addImage:(UIImage *)image1 toImage:(UIImage *)image2; //合并图片
+ (UIImage *)imageFromImage:(UIImage *)image inRect:(CGRect) //裁剪部分图片
+ (void)imageSavedToPhotosAlbum:(UIImage *)image
didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextI &//保存图片到库
关于图片缩放的线程安全和非线程安全操作.
非线程安全的操作只能在主线程中进行操作,对于大图片的处理肯定会消耗大量的时间,如下面的方法
方法&1:&使用&UIKit
+&(UIImage*)imageWithImage&&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;
此方法很简单,&但是,这种方法不是线程安全的情况下.
方法&2:&使用&CoreGraphics
+&(UIImage*)imageWithImage&&UIImage*)sourceImage scaledToSize&CGSize)newSize;
CGFloat&targetWidth&=&targetSize.width;
CGFloat&targetHeight&=&targetSize.height;
CGImageRef&imageRef&=&[sourceImage&CGImage];
CGBitmapInfo&bitmapInfo&=&CGImageGetBitmapInfo(imageRef);
CGColorSpaceRef&colorSpaceInfo&=&CGImageGetColorSpace(imageRef);
if&(bitmapInfo&==&kCGImageAlphaNone)&{
bitmapInfo&=&kCGImageAlphaNoneSkipLast;
CGContextRef&bitmap;
if&(sourceImage.imageOrientation&==&UIImageOrientationUp&||sourceImage.imageOrientation&==&UIImageOrientationDown)&{
bitmap&=&CGBitmapContextCreate(NULL,&targetWidth,&targetHeight,CGImageGetBitsPerComponent(imageRef),CGImageGetBytesPerRow(imageRef),&colorSpaceInfo,&bitmapInfo);
bitmap&=&CGBitmapContextCreate(NULL,&targetHeight,&targetWidth,CGImageGetBitsPerComponent(imageRef),CGImageGetBytesPerRow(imageRef),&colorSpaceInfo,&bitmapInfo);
if&(sourceImage.imageOrientation&==&UIImageOrientationLeft)&{
CGContextRotateCTM&(bitmap,&radians(90));
CGContextTranslateCTM&(bitmap,&0,&-targetHeight);
}&else&if&(sourceImage.imageOrientation&==UIImageOrientationRight)&{
CGContextRotateCTM&(bitmap,&radians(-90));
CGContextTranslateCTM&(bitmap,&-targetWidth,&0);
}&else&if&(sourceImage.imageOrientation&==&UIImageOrientationUp)&{
// NOTHING
}&else&if&(sourceImage.imageOrientation&==&UIImageOrientationDown){
CGContextTranslateCTM&(bitmap,&targetWidth,&targetHeight);
CGContextRotateCTM&(bitmap,&radians(-180.));
CGContextDrawImage(bitmap,&CGRectMake(0,&0,&targetWidth,targetHeight),&imageRef);
CGImageRef&ref&=&CGBitmapContextCreateImage(bitmap);
UIImage*&newImage&=&[UIImage&imageWithCGImage:ref];
CGContextRelease(bitmap);
CGImageRelease(ref);
return&newImage;
这种方法的好处是它是线程安全,加上它负责的&(使用正确的颜色和位图信息,处理图像方向)&的小东西,UIKit&版本不会。
如何调整和保持长宽比&(如&AspectFill&选项)?
它是非常类似于上述,方法,它看起来像这样:
+&(UIImage*)imageWithImage&&UIImage*)sourceImage scaledToSizeWithSameAspectRatio&&CGSize)targetSize;
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
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;
CGImageRef&imageRef&=&[sourceImage&CGImage];
CGBitmapInfo&bitmapInfo&=&CGImageGetBitmapInfo(imageRef);
CGColorSpaceRef&colorSpaceInfo&=&CGImageGetColorSpace(imageRef);
if&(bitmapInfo&==&kCGImageAlphaNone)&{
bitmapInfo&=&kCGImageAlphaNoneSkipLast;
CGContextRef&bitmap;
if&(sourceImage.imageOrientation&==&UIImageOrientationUp&||sourceImage.imageOrientation&==&UIImageOrientationDown)&{
bitmap&=&CGBitmapContextCreate(NULL,&targetWidth,&targetHeight,CGImageGetBitsPerComponent(imageRef),CGImageGetBytesPerRow(imageRef),&colorSpaceInfo,&bitmapInfo);
bitmap&=&CGBitmapContextCreate(NULL,&targetHeight,&targetWidth,CGImageGetBitsPerComponent(imageRef),CGImageGetBytesPerRow(imageRef),&colorSpaceInfo,&bitmapInfo);
// In the right or left cases, we need to switch scaledWidth and scaledHeight,
// and also the thumbnail point
if&(sourceImage.imageOrientation&==&UIImageOrientationLeft)&{
thumbnailPoint&=&CGPointMake(thumbnailPoint.y,&thumbnailPoint.x);
CGFloat&oldScaledWidth&=&scaledWidth;
scaledWidth&=&scaledHeight;
scaledHeight&=&oldScaledWidth;
CGContextRotateCTM&(bitmap,&radians(90));
CGContextTranslateCTM&(bitmap,&0,&-targetHeight);
}&else&if&(sourceImage.imageOrientation&==UIImageOrientationRight)&{
thumbnailPoint&=&CGPointMake(thumbnailPoint.y,&thumbnailPoint.x);
CGFloat&oldScaledWidth&=&scaledWidth;
scaledWidth&=&scaledHeight;
scaledHeight&=&oldScaledWidth;
CGContextRotateCTM&(bitmap,&radians(-90));
CGContextTranslateCTM&(bitmap,&-targetWidth,&0);
}&else&if&(sourceImage.imageOrientation&==&UIImageOrientationUp)&{
// NOTHING
}&else&if&(sourceImage.imageOrientation&==&UIImageOrientationDown){
CGContextTranslateCTM&(bitmap,&targetWidth,&targetHeight);
CGContextRotateCTM&(bitmap,&radians(-180.));
CGContextDrawImage(bitmap,&CGRectMake(thumbnailPoint.x,thumbnailPoint.y,&scaledWidth,&scaledHeight),&imageRef);
CGImageRef&ref&=&CGBitmapContextCreateImage(bitmap);
UIImage*&newImage&=&[UIImage&imageWithCGImage:ref];
CGContextRelease(bitmap);
CGImageRelease(ref);
return&newImage;
.Net 文章一周点击
.Net 文章一月点击
HaoGongJu.Net ( 好工具 ) All Rights Reserved使用UIImagePickerController获取图片大小和名称
1. 需求是读取iOS相册,取得照片(UIimage),照片名字(NSString),照片尺寸(Kb),照片文件类型(jpg,png等等)
2. 现在的问题是我使用UIImagePickerController,获取到了照片,但是不知道怎么去取照片的名字,大小和类型。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
& UIImage *aImage = [info objectForKey:UIImagePickerControllerOriginalImage];
求指教,请问UIImagePickerController能否获得图片的名称?相册里面的图片是否有名称?如果这个方法行不通有没有别的方法能满足需求?
图片的名字就是一个字符串的ID,这个得到也没什么意义。
大小的话,可以从UIImage中获得,有一个 size的属性的。
另外可以参考一下这篇文章:http://bluevt.org/?p=125
楼上正解 正解
1.引入头文件:#import (尖括号)AssetsLibrary/AssetsLibrary.h(尖括号)
CocoaChina会员:lemon0132 期待您帮忙来解答这个问题,一起来帮忙消灭零回复的问题吧! |ios-获得UIImageView的高宽值-CSDN问答
需要获取图片的尺寸,高*宽。
然后将值传递到下面的代码:
UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(25, 5, imgView.size.width, imgView.size.width)];
但是总是不成功,不知道应该怎么实现?谢谢
您认为此问题:

我要回帖

更多关于 获取uiimage的大小 的文章