0

画像をアップロードする前に、次の操作を行っています。アップロード前とアップロード後に画像のサイズを確認すると、サイズが 2 倍になります (つまり、2 MB の画像をアップロードした場合、サーバー上に 4 MB の画像が表示されます)。

    NSTimeInterval timeInterval = [assetDate timeIntervalSince1970];
    ALAssetRepresentation *rep = [temp defaultRepresentation];
    CGImageRef iref = [rep fullResolutionImage];
    StrPath = [StrPath stringByAppendingFormat:@"%d.%@",(int)timeInterval,strImageType];

    UIImage *image =[UIImage imageWithCGImage:iref scale:[rep scale] orientation:(UIImageOrientation)[rep orientation]];
    NSData *dataObj = nil;
    dataObj = UIImageJPEGRepresentation(image, 1.0);
    NSString* StrFileData = [Base64 encode:dataObj];
    NSString* strFileHash = [dataObj md5Test];
4

2 に答える 2

0

いくつかの提案があります。これらに注意すると..役立つはずです

  1. ALAsset defaultRepresentationから直接 ALAsset イメージ NSData を取得できます。

    getBytes:fromOffset:length:error:メソッド。

  2. フル解像度の画像を取得する代わりに、ALAsset のサムネイル画像を使用する

    CGImageRef iref = [myasset アスペクト比サムネイル];

  3. ALAsset Libraay ブロックは別のスレッドで実行されます。メインスレッドでサーバーのアップロードを行います

     dispatch_async(dispatch_get_global_queue(0, 0), ^{
    
       // do the server upload
    
      });
    
于 2013-02-11T02:33:03.247 に答える
0

画像の特定のさとには、次の方法を使用します

+ (UIImage*)resizeImage:(UIImage*)image withWidth:(int)width withHeight:(int)height
{
    CGSize newSize = CGSizeMake(width, height);
    float widthRatio = newSize.width/image.size.width;
    float heightRatio = newSize.height/image.size.height;

    if(widthRatio > heightRatio)
    {
        newSize=CGSizeMake(image.size.width*heightRatio,image.size.height*heightRatio);
    }
    else
    {
        newSize=CGSizeMake(image.size.width*widthRatio,image.size.height*widthRatio);
    }


    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

このメソッドは NewImage を返します。 resizにはなりません :)

于 2013-01-23T10:04:08.790 に答える