1

私はそのようにUIImageを生成しています:

//scale UIView size to match underlying UIImage size
float scaleFactor = 10.0

UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, scaleFactor);

[self.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage* image = UIGraphicsGetImageFromCurrentImageContext();

UIImage のサイズは 3200x2400 で、これが必要です。ただし、電子メールの添付ファイルとして送信するために PNG 形式に変換すると、次のようになります。

NSData* data = UIImagePNGRepresentation(image);

MFMailComposeViewController* controller;
...
[controller addAttachmentData:data mimeType:mimeType fileName:.fileName];

最終的には 720 ppi の画像になり、したがって ~12.8 mb になります。これは大きすぎます。

720 ppi がどこから来ているのかわかりません。UIImage は 72 ppi の画像から生成されます。それは何か関係があるに違いありません:

UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque,scaleFactor);

基になる UIImage (UIView の境界よりもはるかに大きい) に基づいて UIView から UIImage を作成する必要がありますが、元の ppi を維持する必要があります。720 ppi は、電子メールの添付ファイルとしては実用的ではありません。

何かご意見は?

4

3 に答える 3

3

あなたscaleFactortoo highどちらresultsにいますかlarge image dataDecrease scaleFactorそしてスクリーンショットを撮ります。

基本的にはそうあるべき

float scaleFactor = 1.0;

次のように PNG に変換します。

 NSData *imageData = UIImagePNGRepresentation(imagehere);

imageData をメールに添付します。

編集:次のように画像のサイズを変更します:

 UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, 1.0);
 [yourimageview.image drawInRect:CGRectMake(0,0,self.bounds.size)];
 UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
于 2012-11-21T09:41:39.467 に答える
1

eagle.dan.1349 の推奨に従って、次のことを試しました。

-(UIImage*)convertViewToImage
{
    UIImage* retVal = nil;

    //create the graphics context
    CGSize imageSize = targetImage.size;
    CGSize viewSize = self.bounds.size;

    //CGSize cvtSize = CGSizeMake(imageSize.width/viewSize.width,            imageSize.height/viewSize.height);
    float scale = imageSize.width/viewSize.width;

    UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, scale);

    //write the contents of this view into the context
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];

    //get the image
    retVal = UIGraphicsGetImageFromCurrentImageContext();

    //close the graphics context
    UIGraphicsEndImageContext();

    NSData* data = UIImageJPEGRepresentation(retVal, 0.0);
    [retVal release];
    retVal = [UIImage imageWithData:data];

    return retVal;
}

*後で私は実行します:

NSData* data = UIImagePNGRepresentation(image);

ただし、前述したように、これでも 5.8 MB の画像になるため、300 ppi 付近のどこかであると思われます。

必要な解像度とサイズ (72 ppi、3200X2400) で、UIView から作成された UIImage が必要です。これを行う方法があるはずです。

于 2012-11-21T14:30:58.883 に答える
0

まず、あなたのデバイスは、そのような HD 画像から血の涙で泣かないのだろうか。私が画像関連のプロジェクトに取り組んでいたとき、PNG のような高解像度は、SNS での共有や電子メールでの送信に多くの問題を引き起こしたため、JPEG に移行しました。さらに、Web 上で画像を PNG で送信することは一般的に推奨されません。適切な圧縮で JPEG にすることをお勧めします。ただし、PNG を使用する必要がある場合は、この種のトリックを作成できます。最初に JPEG データに変換し、このデータで画像を初期化してから、PNG に変換します。

編集:さらに、320X240 が必要なコンテキスト サイズのみを設定し、システムが必要なスケールを決定するために 10 ではなく 0 にスケールしてみてください。それは役立つかもしれません。次に、結果の UIImage をもう一度スケーリングします。

于 2012-11-21T09:51:38.133 に答える