uiimage-调整UIImage尺寸适应UIImageView

问题描述

调整UIImage尺寸适应UIImageView

有一个 3264?×?2448图片, imageView尺寸768 × 1024,我需要调整图片尺寸适应视图,但是不能让图片质量下降。

试过下面的方法:

- (UIImage *)imageByScalingProportionallyToSize: (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;
        else
            scaleFactor = heightFactor;
        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;
       }
    }
    // this is actually the interesting part:
    UIGraphicsBeginImageContext(targetSize);
    CGRect thumbnailRect = CGRectZero;
    thumbnailRect.origin = thumbnailPoint;
    thumbnailRect.size.width  = scaledWidth;
    thumbnailRect.size.height = scaledHeight;
    [sourceImage drawInRect:thumbnailRect];
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    if(newImage == nil) NSLog(@"could not scale image");
    return newImage ;
}

解决方案

试试

+ (UIImage*)imageWithImage:(UIImage*)image
               scaledToSize:(CGSize)newSize;
{
   UIGraphicsBeginImageContext( newSize );
   [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
   UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   return newImage;
}

指定新尺寸(768,1024) 然后传递初始图片,但是要保证高宽比和原始的比例一样。

时间: 2024-07-31 13:33:58

uiimage-调整UIImage尺寸适应UIImageView的相关文章

ios-在导航标题中调整字体尺寸

问题描述 在导航标题中调整字体尺寸 有没有方法实现导航标题的字体根据宽度调整? 比如[UILabel setAdjustsFontSizeToFitWidth:YES] 试过很多方法都没实现,请好心人帮忙,谢谢. 解决方案 自定义UINavigationItem的titleView 在titleView中创建一个UILabel ,设置UILabel的相关属性再试. UILabel *lbl=[[UILabel alloc] initWithFrame:....]; [lbl setAdjusts

在Word 2007中拖动边框调整表格尺寸

在Word2007中,用户可以通过拖动表格边框的方式调整表格的尺寸.拖动表 格左边框可以调整表格最左边列的宽度:拖动表格右边框可以调整表格最右边列 得宽度:拖动表格下边框可以调整表格最下边行的高度:拖动表格右下方的控制 柄可以整体放大或缩小表格尺寸,如图2009020501所示. 图2009020501 拖动表格控制柄

Word 2007技巧:拖动边框调整表格尺寸

在Word 2007中,用户可以通过拖动表格边框的方式调整表格的尺寸.拖动Word 2007表格左边框可以调整表格最左边列的宽度;拖动表格右边框可以调整表格最右边列得宽度;拖动表格下边框可以调整表格最下边行的高度;拖动表格右下方的控制柄可以整体放大或缩小表格尺寸,如图所示. 拖动Word 2007表格控制柄

javascript 动态调整图片尺寸实现代码_图象特效

我前段时间写的一篇文章就遇到过这种事情,后来用CSS的overflow和max-width属性暂时解决了页面变形的问题.这种方法好处是简单,但坏处是会破坏某些细节的效果. 如overflow:hidden,意思是当内部元素宽度大于父框架时隐藏超出宽度的部分.这样做可能会是一些内容突然截断,被隐藏了,很对不起观众. 通过max-width属性限制文章插图最大宽度的话,需要考虑各浏览器的兼容性.IE6是不支持这个属性的,在我印象中,一些浏览器虽然支持这个属性,但图片不是等比缩放的(好像是Safari

UIImageView UIImage

------------------------------------------------------------------------------------UIImage------------------------------------------------------------------------------------------ 1: 将 UIImage 指定的像素以复制的方式进行拉伸.(IOS 4X 时代) UIImage *img=[UIImage image

IOS中图片(UIImage)拉伸技巧

IOS中图片拉伸技巧与方法总结 一.了解几个图像拉伸的函数和方法 1.直接拉伸法 简单暴力,却是最最常用的方法,直接将图片设置为ImageView的image属性,图片便会随UIImageView对象的大小做自动拉伸.这种拉伸的方法有一个致命的缺陷,它会使图像发生失真与形变. 2.像素点的拉伸 - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHe

ios-下载和设置UIImage不在主线程中

问题描述 下载和设置UIImage不在主线程中 从web服务器中添加一个图片.怎么设置它不在主线程上?我想要视图先加载,然后图片加载.这样用户在体验时不会感到很慢. 就是不知道怎么加到代码中. NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:mainImageUrl]]; UIImage *image = [ [UIImage alloc] initWithData:imageData]; UIView

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

截取UIImage指定大小区域最近遇到这样的需求:从服务器获取到一张照片,只需要显示他的左半部分,或者中间部分等等.也就是截取UIImage指定大小区域. UIImage扩展: 我的解决方案是对UIImage进行扩展.通过CGImageRef和CGImage完成截取,调用的方法是:CGImageCreateWithImageInRect.扩展类叫UIImage+Crop,具体代码如下: UIImage+Crop.h #import <UIKit/UIKit.h> typedef NS_ENUM

UIImage初始化的区别两种方法介绍(面试常见)_Android

UIImage可以通过以下两种方式进行初始化: //第一种初始化方式:[注意使用这种初始化的时候如果是png格式的可以不给后缀名,根据屏幕的的分辨率去匹配图片] UIImage *image = [UIImage imageNamed:@"v_red_heart_selected"]; //第二种初始化方式:[必须拼接图片的全名称,否则image的路径为空] NSString *filePath = [[NSBundle mainBundle] pathForResource:@&qu