【问题标题】:UIImage strange scalingUIImage 奇怪的缩放比例
【发布时间】:2013-03-07 08:44:32
【问题描述】:

我有一些大小为 1000x1000 的文件。

我想加载它并让它变小

UIImage *newImage = [UIImage imageWithCGImage:[UIImage imageWithContentsOfFile:filename].CGImage scale:(1.0f / scale) orientation:UIImageOrientationUp];
NSLog(newImage size: %f, %f", newImage.size.width, newImage.size.height);
// shows correct scaled size -> 50, 50

然后我想保存这个缩放的图像

NSData* imageData = UIImageJPEGRepresentation(newImage, 1.0);
[imageData writeToFile:otherFileName atomically:NO];

看到新图像以第一个起始尺寸 (1000x1000) 保存,我感到很困惑。

这怎么可能以及如何处理?

【问题讨论】:

  • 这4个语句是同一个方法吗?
  • 看来你需要知道如何缩放图像。可能重复stackoverflow.com/questions/6703502/…
  • 为什么不像第一步那样使用NSData* imageData = UIImageJPEGRepresentation(newImage, 1.0f / scale);
  • pmk,作为已回答的解决方案,这一切都应该更快吗?

标签: iphone ios objective-c uiimage


【解决方案1】:

只做一种方法:

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

    float width = newSize.width;
    float height = newSize.height;

    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect: CGRectMake(0, 0, width, height)];

    UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return smallImage;
}

然后像这样设置你需要的尺寸:

UIImage *resizedImg = [self scaleImage:[UIImage imageWithData:imageData] toSize:CGSizeMake(150.0f,150.0f)]; // i have taken 150 you can change value here

【讨论】:

    【解决方案2】:

    您可以使用波纹管方法创建具有较小尺寸的图像而无需刮擦图像:-

    你可以调用如下方法:-

    newImage=[self scaleImage:newImage toSize:CGSizeMake(250, 250)];
    
    
    - (UIImage*) scaleImage:(UIImage*)image toSize:(CGSize)newSize {
        CGSize scaledSize = newSize;
        float scaleFactor = 2.0;
        if( image.size.width > image.size.height ) {
            scaleFactor = image.size.width / image.size.height;
            scaledSize.width = newSize.width;
            scaledSize.height = newSize.height / scaleFactor;
        }
        else {
            scaleFactor = image.size.height / image.size.width;
            scaledSize.height = newSize.height;
            scaledSize.width = newSize.width / scaleFactor;
        }
    
        UIGraphicsBeginImageContextWithOptions( scaledSize, NO, 0.0 );
        CGRect scaledImageRect = CGRectMake( 0.0, 0.0, scaledSize.width, scaledSize.height );
        [image drawInRect:scaledImageRect];
        UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        return scaledImage;
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2011-02-08
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多