1

私のアプリでは、ユーザーがスナップチャットのように画像の上にテキストを配置し、その画像をデバイスに保存できるようにしています。画像の上にテキスト ビューを追加し、次のコードを使用して画像の写真を撮るだけです。

UIGraphicsBeginImageContext(imageView.layer.bounds.size);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* savedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

しかし、自分の画像のテキストとスナップチャットの画像のテキストを比較すると、かなり違います。画像の上にある Snapchat の単語テキストは、私のものよりもはるかに鮮明です。私のは非常にピクセル化されたように見えます。また、ALAssetLibraryを使用して画像をそのまま保存するだけで、画像をまったく圧縮していません。

ありがとうございました

4

2 に答える 2

2

を使用するUIGraphicsBeginImageContextと、デフォルトで 1x スケール (つまり、非網膜解像度) になります。あなたはおそらく欲しい:

UIGraphicsBeginImageContextWithOptions(imageView.layer.bounds.size, YES, 0);

画面と同じ縮尺 (おそらく 2 倍) を使用します。最後のパラメーターは、結果の画像のスケールです。0 は「画面が何であれ」を意味します。

于 2015-04-24T20:51:58.223 に答える
0

imageView が画面のサイズに合わせてスケーリングされている場合、jpeg もその解像度に制限されると思います。UIGraphicsBeginImageContextWithOptions でスケールを設定しても十分な解像度が得られない場合は、より大きなオフスクリーン イメージで描画を行うことができます。何かのようなもの:

UIGraphicsBeginImageContext(imageSize);
[image drawInRect:CGRectMake(0,0,imageSize.width,imageSize.height)];
CGContextScaleCTM(UIGraphicsGetCurrentContext(),scale,scale);
[textOverlay.layer renderInContext:UIGraphicsGetCurrentContext()];
newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

おそらく画面サイズである textOverlay ビューを画面外の画像サイズにスケーリングするには、「スケール」値を設定する必要があります。

または、おそらくもっと簡単に、より大きな UIImageView から始めることができますが、それを別の UIView 内に配置して、画面に収まるようにスケーリングします。テキスト オーバーレイ ビューでも同じことを行います。次に、コンポジットを作成するためのコードが、UIImageView に選択した解像度に関係なく機能するはずです。

于 2015-04-24T21:37:25.617 に答える