私は 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
ましたが、代わりに、元の画像が適切に変更されているように見えますが、前にそれは代わりに変更され、それは自己を返しますか? わかりません、本当に奇妙に思えます。
ここで何が起こっているのか、コードを修正して目的の動作を得る方法を誰かに説明してもらえますか?