【问题标题】:IOS: problem with resize a UIImageIOS:调整 UIImage 大小的问题
【发布时间】:2011-09-14 13:38:23
【问题描述】:

我想调整 UIImage 的大小并尝试以下代码:

UIImage *newImage = [image1toResize _imageScaledToSize:CGSizeMake(290, 390) interpolationQuality:1]; 

但我有这个警告: 警告:“UIImage”可能无法响应“-_imageScaledToSize:”

为什么?

【问题讨论】:

    标签: ios xcode image-resizing


    【解决方案1】:

    您并没有要求它,只是以防万一您对如何...感兴趣,这是一个非常简单的代码:

    CGSize newSize = CGSizeMake(1024, 768);  //whaterver size
    UIGraphicsBeginImageContext(newSize);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();
    

    【讨论】:

    • 我知道这个线程已经有一年了,但是我的代码已经成功了,除了一个例外......我的图像如下: UIImage *image = [UIImage imageNamed:@"myImage.png "];该特定图像文件(不同的变量)在我的显示器上的其他地方使用,并且在两个地方都在调整大小......我在某处有一些参考问题吗?或者我的文件中是否必须有另一个图像副本?后者似乎很尴尬......
    • 您可能有参考问题。
    【解决方案2】:

    你可以通过做调整大小:

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

    【讨论】:

      【解决方案3】:

      _imageScaledToSize 不是 UIImage 函数。如果此函数是您正在使用的第 3 方库的一部分,那么您需要确保 #import 文件中的正确标题。

      【讨论】:

        【解决方案4】:

        您可以在UIImage 上使用这些类别来操作UIImage 对象(例如调整它们的大小或裁剪它们):

        http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

        【讨论】:

          【解决方案5】:

          这是因为UIImage 类没有这样的方法。您可以找到there 的可用UIImage 方法列表

          【讨论】:

            【解决方案6】:

            在不丢失纵横比的情况下缩放图像(即不拉伸图像)的最佳方法是使用此方法:

            //to scale images without changing aspect ratio
            

            + (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)newSize {

            float width = newSize.width;
            float height = newSize.height;
            
            UIGraphicsBeginImageContext(newSize);
            CGRect rect = CGRectMake(0, 0, width, height);
            
            float widthRatio = image.size.width / width;
            float heightRatio = image.size.height / height;
            float divisor = widthRatio > heightRatio ? widthRatio : heightRatio;
            
            width = image.size.width / divisor;
            height = image.size.height / divisor;
            
            rect.size.width  = width;
            rect.size.height = height;
            
            //indent in case of width or height difference
            float offset = (width - height) / 2;
            if (offset > 0) {
                rect.origin.y = offset;
            }
            else {
                rect.origin.x = -offset;
            }
            
            [image drawInRect: rect];
            
            UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
            
            return smallImage;
            

            }

            将此方法添加到您的 Utility 类中,以便您可以在整个项目中使用它,并像这样访问它:

            xyzImageView.image = [Utility scaleImage:yourUIImage toSize:xyzImageView.frame.size];
            

            此方法在保持纵横比的同时进行缩放。 如果按比例缩小的图像的宽度大于高度(反之亦然),它还会为图像添加缩进。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-05-17
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多