0

私は 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"あり、フルサイズの画像になります。

UIImageCategoriesUIImage 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ましたが、代わりに、元の画像が適切に変更されているように見えますが、前にそれは代わりに変更され、それは自己を返しますか? わかりません、本当に奇妙に思えます。

ここで何が起こっているのか、コードを修正して目的の動作を得る方法を誰かに説明してもらえますか?

4

1 に答える 1

0

理解した:

元の画像は実際には 1024 よりも大きいと思っていましたが、そうではありませんでした。次に、何が起こっていたのか、サイズは PIXELS ではなく POINTS で指定されるため、作成していた「小さい」画像は、実際には画像を縮小するのではなく、画像を拡大しています。それが私を捨てていたものです。

サイズを半分にカットすると、探しているピクセル寸法が得られます。

コメントありがとうございます、助かりました!

于 2013-04-18T03:36:23.467 に答える