我目前正在iphone上开发一个简单的photoshop类应用程序。当我想拼合图层时,标签的位置很好,但字体大小不好。下面是我要扁平化的代码:
UIGraphicsBeginImageContext(CGSizeMake(widthDocument,widthDocument));
for (UILabel *label in arrayLabel) {
[label drawTextInRect:label.frame];
}
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
有人能帮我吗?
发布于 2012-08-08 23:08:40
出发地:pulling an UIImage from a UITextView or UILabel gives white image。
// iOS
- (UIImage *)grabImage {
// Create a "canvas" (image context) to draw in.
UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, 0.0); // high res
// Make the CALayer to draw in our "canvas".
[[self layer] renderInContext: UIGraphicsGetCurrentContext()];
// Fetch an UIImage of our "canvas".
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
// Stop the "canvas" from accepting any input.
UIGraphicsEndImageContext();
// Return the image.
return image;
}
// Swift扩展w/ usage。credit @Heberti Almeida在以下评论中
extension UIImage {
class func imageWithLabel(label: UILabel) -> UIImage {
UIGraphicsBeginImageContextWithOptions(label.bounds.size, false, 0.0)
label.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return img
}
}
用法:
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 30, height: 22))
label.text = bulletString
let image = UIImage.imageWithLabel(label)
发布于 2012-08-08 23:09:12
您需要在上下文中呈现标签
替换
[label drawTextInRect:label.frame];
使用
[label.layer renderInContext:UIGraphicsGetCurrentContext()];
而且您需要为每个标签创建一个图像,因此将for循环移到begin和end上下文调用之外
发布于 2016-07-07 16:05:06
对于Swift,我使用UIView-extension:
// Updated for Swift 3.0
extension UIView {
var grabbedImage:UIImage? {
get {
UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0.0)
layer.render(in: UIGraphicsGetCurrentContext()!)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return img
}
}
}
https://stackoverflow.com/questions/11867152
复制相似问题