我目前正在开发一款用于创建明信片的应用程序。但是,我想知道如何在 UITextView(透明背景)中存储图片和框架(我有三个框架,具体取决于分辨率)和一些文本。
我需要保持原始照片分辨率,即使框架或屏幕不允许超过 320 x 480 像素 (2:3) 并插入框架,然后插入文本。我不太关心文本,只要我能在框架内保留图像即可。
我所需要的只是关于如何解决这个问题的建议:我需要框架类,也许还需要方法(函数、消息)的提示,我可以使用这些方法将图像处理为位图或 jpeg 或 png。
不能做:
我的项目经理的想法:将它以天知道哪种格式发送到转换器网页(我记不起 http 地址),天知道如何指示网页合并所有 View ,然后等待它返回到电话并保存。明信片的创建必须在本地完成,以防 Ipad 用户想要创建它们然后将它们保存到 PC 或其他东西中(就个人而言,我想用尽 iPhone 开发框架必须提供的所有资源)。
获取合并所有三个 UIViews 类/子类的当前上下文。非常适合 320 x 480,但不适用于更大的分辨率。
是的,非常感谢您的回答——这就是我的方法。我认为有更好的方法,例如将图像和文本作为位图数据、原始数据或其他方式处理,以更好地保留原始信息。
但我仍然有一个小问题让我有点烦恼:图像(框架内)必须从图像库或相机 Controller 中选择,但是嘿,它给你带来了一个对象(图像大小适合屏幕)和一本字典,它也令人惊讶地带来了原始图像。现在,有两个对象。但是明信片必须以 4 种不同的分辨率生成,并且带来图像的四个“版本”会产生巨大的内存开销。
我怎样才能避免这种情况?我是否应该使用对以下字典元素的引用从内存中提取它们,创建明信片,通过网络发送然后销毁它们?
NSString *const UIImagePickerControllerMediaURL;
NSString *const UIImagePickerControllerReferenceURL;
在 obj-c 文档中是指向原始信息的对象...我只是想在需要时通过 alloc 和 dealloc 减少开销。
最佳答案
您需要将明信片绘制成新的内存图像。创建新图像的最简单方法是 UIGraphicsBeginImageContext()
函数。然后,您可以使用 UIKit 绘图方法将背景图像、文本等渲染到新图像中,并通过 UIGraphicsGetImageFromCurrentImageContext()
获取生成的图像。根据您的需要,您还可以使用 UIImageJPEGRepresentation()
从生成的图像创建 JPEG/PNG 并将其写入磁盘。
这是一个例子:
UIImage *backgroundImage = [UIImage imageNamed:@"MyPostcardBackground.jpg"];
CGRect frameRect = CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height);
UIGraphicsBeginImageContext(backgroundImage.size);
[backgroundImage drawInRect:frameRect];
NSString *text = @"Caption here...";
[[UIColor whiteColor] set];
[text drawInRect:frameRect withFont:[UIFont boldSystemFontOfSize:35.0] lineBreakMode:UILineBreakModeWordWrap];
//...
UIImage *postcardImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
关于objective-c - 如何在 UIImageView 中创建大图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4607057/