Как создать изображение из UILabel?
В настоящее время я разрабатываю простой фотошоп, например приложение на iphone. Когда я хочу сгладить свои слои, ярлыки находятся в хорошем положении, но с плохим размером шрифта.
Здесь мой код для сглаживания:
UIGraphicsBeginImageContext(CGSizeMake(widthDocument,widthDocument));
for (UILabel *label in arrayLabel) {
[label drawTextInRect:label.frame];
}
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Кто-нибудь может мне помочь?
Ответы
Ответ 1
От: вытаскивание UIImage из UITextView или UILabel дает белое изображение.
//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;
}
//Быстрое расширение w/использование. кредит @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)
Ответ 2
Я создал расширение Swift, чтобы сделать UILabel
в UIImage
:
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)
Ответ 3
вам нужно отобразить метку в контексте
заменить
[label drawTextInRect:label.frame];
с
[label.layer renderInContext:UIGraphicsGetCurrentContext()];
и вам нужно будет создать одно изображение на ярлык, поэтому переместите цикл for за пределы начальных и конечных контекстных вызовов
Ответ 4
Вы можете использовать renderInContext для любого CALayer. Он нарисует ваш слой в контексте. Чтобы вы могли изменить его на изображение. Также, если вы сделаете renderInContext в представлении, все его подпрограммы будут нарисованы в контексте. Поэтому вместо повторения всех ярлыков, добавляя метки, вы можете добавить их в контейнер. И просто нужно сделать renderInContext в этом контейнере.
Ответ 5
для Swift, я использую это расширение UIView:
// 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
}
}
}