3

ユーザーが写真ライブラリから画像を選択すると、サイズを変更してサーバーにアップロードし、アプリの別の時点でユーザーがすべての写真を表示できるようにします。(ワークフローを単純化しています)

「詳細」画面の uiimageview は 320 x 320 です。以下の方法に基づいて、使用する必要があります。

UIImage *image = [UIImage imageWithCGImage:img];

また

UIImage *image = [UIImage imageWithCGImage:img scale:[UIScreen mainScreen].scale orientation:img.imageOrientation];

パート B は、イメージ (nsdata) のダウンロードを要求するときに使用する必要がありますimageWithCGIImageimageWithCGIImage:scale:orientation

- (UIImage *)resizedImageForUpload:(UIImage *)originalImage {

  static CGSize __maxSize = {640, 640};

  NSMutableData *data = [[NSMutableData alloc] initWithData:UIImageJPEGRepresentation(originalImage, 1.0)];

  CFMutableDataRef dataRef = (__bridge CFMutableDataRef)data;
  CGImageSourceRef imgSrc  = CGImageSourceCreateWithData(dataRef, NULL);

  CGFloat width = [originalImage maxDimensionForConstraintSize:__maxSize];

  NSNumber *maxWidth    = [NSNumber numberWithFloat:width];
  NSDictionary *options = @{
                            (__bridge NSString *)kCGImageSourceCreateThumbnailFromImageAlways : @YES,
                            (__bridge NSString *)kCGImageSourceCreateThumbnailWithTransform: @YES,
                            (__bridge NSString *)kCGImageSourceThumbnailMaxPixelSize : maxWidth
                            };

  CFDictionaryRef cfOptions     = (__bridge CFDictionaryRef)options;
  CGImageRef img                = CGImageSourceCreateThumbnailAtIndex(imgSrc, 0, cfOptions);
  CFStringRef type              = CGImageSourceGetType(imgSrc);
  CGImageDestinationRef imgDest = CGImageDestinationCreateWithData(dataRef, type, 1, NULL);

  CGImageDestinationAddImage(imgDest, img, NULL);
  CGImageDestinationFinalize(imgDest);

  UIImage *image = [UIImage imageWithCGImage:img];

  CFRelease(imgSrc);
  CGImageRelease(img);
  CFRelease(imgDest);

  return image;
}
4

1 に答える 1

3

私自身の質問に対する答えを見つけたようです。はresizeImageForUpload、デバイスに基づいてスケーリングしようとするべきではありません。最大サイズ 640,640 (320,320 uiimageview の網膜サイズ) を定義しているので、他の操作は必要ありません。画像のキャッシュを追加し、その時点でスケーリングを処理しています。

UIImage *image = [UIImage imageWithData:imgData scale:[UIScreen mainScreen].scale];

そして戻る。何かを台無しにしたと思った理由は、既に拡大縮小された画像を拡大しようとしていたからです。学んだ教訓。

于 2013-04-08T20:40:24.187 に答える