我是iOS开发的新手,并且遇到了一些对我来说很奇怪的事情。我有以下方法来拍摄大图像并制作一个较小的版本,然后将它们上传到服务器:
- (void)prepareAndUploadImages
{
UIImage *originalImage = self.imageView.image;
UIImage *smallerImage = [originalImage resizedImageWithContentMode:UIViewContentModeScaleAspectFill bounds:CGSizeMake(1024.0, 768.0) interpolationQuality:1];
[self uploadImage:originalImage withFilename:@"original.jpg"];
[self uploadImage:smallerImage withFilename:@"smaller.jpg"];
}
这样可以很好地上传图像,但奇怪的是当它们落在服务器上时,"original.jpg"
图像实际上是缩小的版本,"smaller.jpg"
是全尺寸图像。
我正在使用UIImageCategories中的UIImage resizedImageWithContentMode:
方法,它的返回如下所示:
return [self resizedImage:newSize interpolationQuality:quality];
它调用的resizedImage:interpolationQuality方法返回:
return [self resizedImage:newSize transform:transform drawTransposed:drawTransposed interpolationQuality:quality];
resizedImage:transform:...方法调用返回如下:
// Get the resized image from the context and a UIImage
CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef scale:self.scale orientation:UIImageOrientationUp];
...
return newImage;
所以,我真的希望我的代码将smallerImage
设置为这个新图像,该图像是作为原始图像上调用的方法的返回值而创建的,但是看起来行为就是原始图像图像被修改到位,但在它被修改到位之前它会返回self?我不知道,这看起来很奇怪。
任何人都可以向我解释这里发生了什么,以及如何修复我的代码以获得所需的行为?
答案 0 :(得分:0)
想出来:
我认为原始图像实际上大于1024,但事实并非如此。然后发生了什么,大小是以POINTS而不是PIXELS给出的,所以我制作的“较小”图像实际上是对图像进行放大,而不是缩小图像。这就是让我失望的原因。
如果我将尺寸缩小一半,我会得到我正在寻找的像素尺寸。
感谢您的评论,他们帮助了!