【问题标题】:Resizing Images Objective-C [duplicate]调整图像大小Objective-C [重复]
【发布时间】:2012-05-07 06:06:11
【问题描述】:

我正在尝试缩小使用 iPhone 4 及更高版本拍摄的 Objective-C 中的图像,以便尽快将其发送到服务器。目前,全尺寸图像需要很长时间。

目前我正在尝试的缩小规模是:

CGSize imageSize;

imageSize = CGSizeMake(484, 888);

UIImage *img = [UIImage imageWithContentsOfFile:path];

UIGraphicsBeginImageContext( imageSize );
[img drawInRect:CGRectMake(0,0,imageSize.width,imageSize.height)];
UIImage* realfrontImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *frontImageData = UIImageJPEGRepresentation(realfrontImage, 1.0);

这给了我一个 320x460 的图像,我如何获得我想要的 484x888 尺寸。

【问题讨论】:

  • xcode 只是一个编辑器。
  • 感谢编辑非常累。感谢您迄今为止提出的想法。它们与我目前使用的非常相似,当我在服务器上查看时,我最终得到的图像大小为 320x426
  • 您确定连接没有问题吗?我的意思是,如果上传到您的服务器受到干扰,它会给您留下未完成的图像上传,但是,这主要会影响图像的高度。
  • 意识到我在服务器端做了一些愚蠢的事情,导致我的图像再次调整大小,无论我尝试了什么。现在全部排序,在这里找到了一个很好的教程:link 这真的很有帮助。感谢大家的帮助我尝试了很多你的解决方案,但由于我自己的愚蠢,我不能说哪些有效或无效。

标签: ios objective-c uiimage uikit


【解决方案1】:
-(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize {
    UIGraphicsBeginImageContext(newSize);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();
    return newImage;
}

使用此方法缩小图像。

【讨论】:

  • 如果我发送从这个方法检索到的图像,当我将它发送到服务器时,我会得到一个 320x426 的图像,它似乎只会像屏幕截图一样进入屏幕大小。
  • 我在 CGBitmapContextCreate 上得到 EXC_BAD_ACCESS
  • 我发现这种方式在iOS 5.0之后有内存泄漏见下! stackoverflow.com/a/4712537/1752988
【解决方案2】:

// 用你的调整比例调用这个函数...

 -(UIImage*)scaleByRatio:(float) scaleRatio
{ 
  CGSize scaledSize = CGSizeMake(self.size.width * scaleRatio, self.size.height * scaleRatio);
   CGColorSpaceRef colorSpace;
   int   bitmapBytesPerRow;
   bitmapBytesPerRow   = (size.width * 4);

    //The output context.   
   UIGraphicsBeginImageContext(scaledSize);
   CGContextRef context = context = CGBitmapContextCreate (NULL,
                             scaledSize .width,
                             scaledSize .height,
                             8,      // bits per component
                             bitmapBytesPerRow,
                             colorSpace,
                             kCGImageAlphaPremultipliedLast);

 //Percent (101%)    
 #define SCALE_OVER_A_BIT 1.01

//Scale.
CGContextScaleCTM(context, scaleRatio * SCALE_OVER_A_BIT, scaleRatio *      SCALE_OVER_A_BIT);
[self drawAtPoint:CGPointZero];

  //End?
  UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 return scaledImage;
}

希望对你有所帮助...

【讨论】:

  • 对不起,我如何使用这个函数我得到一个在 C99 警告中无效
  • #import <QuartzCore/QuartzCore.h>...
  • 我必须将它用作 UIImage 类别吗?
【解决方案3】:

也许这篇文章对你有帮助:How to resize the image programmatically in objective-c in iphone

当心...您在 Objective-C 中执行此操作,...而不是 XCode。 XCode 是您在其中开发 Objective-c 的应用程序。就像 Netbeans 或 Eclipse 常用于 Java 和 PHP。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2012-01-05
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多