iPad の画面に表示されている画像を JPG、PNG、または PDF ファイルとしてエクスポートしたいと考えています。
簡単に言えば、ユーザーが画面上で何かを作成し、たとえば「PNG にエクスポート」をクリックすると、PNG ファイルが作成されます。
どうすればそれを行うことができますか?
iPad の画面に表示されている画像を JPG、PNG、または PDF ファイルとしてエクスポートしたいと考えています。
簡単に言えば、ユーザーが画面上で何かを作成し、たとえば「PNG にエクスポート」をクリックすると、PNG ファイルが作成されます。
どうすればそれを行うことができますか?
あなたが話しているのがUIImageの場合-その内容をファイルに書き込み、画像をpngまたはjpegデータストリームとして取得するための組み込みメソッドがあります。詳細については、UIImage クラスのリファレンスを参照してください。
私の知る限り、PDFにエクスポートするためのビルトイン機能はありません。もちろん、PDF を作成して画像を描画することもできます。これはチュートリアルで理解しやすく、画像の描画が含まれています: http://www.ioslearner.com/generate-pdf-programmatically-iphoneipad/
コメントに応じて編集します。コメントに対して応答が大きすぎます:
一度GLレイヤーで同様のことをしました。あなたの場合、それはより簡単なはずです。ビューのレイヤーから UIImage を取得する方法については、ここでUIView レイヤーを UIImageに変換すると ここでUIView を UIImage として変換する方法について説明します。. UIImage に格納したら、http://developer.apple.com/library/ios/#documentation/uikit/reference/UIImage_Class/Reference/Reference.html のリファレンスを参照してください。UIImages を JPEG と PNG に変換する UIKit 関数が利用可能であることがわかります (前に述べたメソッドではありませUIImagePNGRepresentation
ん)UIImageJPEGRepresentation
。参照/UIKitFunctionReference/Reference/reference.html#//apple_ref/c/func/UIImagePNGRepresentation. これらの関数は NSData オブジェクトを返します。
NSData はここに文書化されています: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html
データをファイルに書き込むメソッドが付属しています。writeToFile:atomically:
例えば。
ここに例があります。私の場合、一意のファイル名が必要だったので、タイムスタンプを取得することにしました。ここでは、より使いやすいファイル名を使用することをお勧めします。
// Use current time stamp for some unique photo ID
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *pathToDocuments=[paths objectAtIndex:0]; // this returns the path to the App's document directory
NSString *photoID = [NSString stringWithFormat:@"%f", [[NSDate date] timeIntervalSince1970]]; // this is just a time stamp. This is what you are most likely to do different.
NSString *fileName = [NSString stringWithFormat:@"%@/%@.jpg", pathToDocuments, photoID]; // now you have a fully qualified path to a file within that part of the file system that belongs to your app. It will be overwritten if it exists.
// Actually save the image (JPEG)
NSData *imgData = UIImageJPEGRepresentation(theImage, 1); // convert to jpeg - 1.0 represents 100%
[imgData writeToFile:fileName atomically:YES]; // actually save the data.
覚えていない情報源からの助けを借りて、UIView のこのカテゴリを作成しました。
@interface UIView (Rendering)
+ (UIImage *)renderImageFromLayer:(CALayer *)layer withRect:(CGRect)frame;
- (UIImage *)renderImageWithRect:(CGRect)frame;
@end
@implementation UIView (Rendering)
+ (UIImage *)renderImageFromLayer:(CALayer *)layer withRect:(CGRect)frame
{
// Create a new context of the desired size to render the image
UIGraphicsBeginImageContextWithOptions(frame.size, YES, 1.0);
CGContextRef context = UIGraphicsGetCurrentContext();
// Translate it, to the desired position
CGContextTranslateCTM(context, -frame.origin.x, -frame.origin.y);
// Render the view as image
[layer renderInContext:context];
// Fetch the image
UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
// Cleanup
UIGraphicsEndImageContext();
return renderedImage;
}
- (UIImage *)renderImageWithRect:(CGRect)frame
{
return [UIView renderImageFromLayer:self.layer withRect:frame];
}
@end