すべてのApple Emojis。
すべての絵文字を取得して、サイトからコピーすることでStringに入れることができます getemoji 正しい順序の絵文字を画像として。
文字列にコピーした絵文字をUIImageに変換する良い方法はありますか?
またはすべてのApple絵文字を正しい順序で取得するためのより良い解決策は?
この拡張機能をプロジェクトに追加します
import UIKit
extension String {
func image() -> UIImage? {
let size = CGSize(width: 40, height: 40)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
UIColor.white.set()
let rect = CGRect(Origin: .zero, size: size)
UIRectFill(CGRect(Origin: .zero, size: size))
(self as AnyObject).draw(in: rect, withAttributes: [.font: UIFont.systemFont(ofSize: 40)])
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
上記のコードは、現在のString
を白い背景色でImage Contextに描画し、最後にUIImage
に変換します。
今、あなたは書くことができます
絵文字記号のユニコード値を示す範囲のリストが与えられた
let ranges = [0x1F601...0x1F64F, 0x2702...0x27B0]
画像のリストに変換できます
let images = ranges
.flatMap { $0 }
.compactMap { Unicode.Scalar($0) }
.map(Character.init)
.compactMap { String($0).image() }
結果:
範囲のリストが完全であることを保証できません。自分で検索する必要がありますか????
Swift 4:
extension String {
func emojiToImage() -> UIImage? {
let size = CGSize(width: 30, height: 35)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
UIColor.white.set()
let rect = CGRect(Origin: CGPoint(), size: size)
UIRectFill(rect)
(self as NSString).draw(in: rect, withAttributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 30)])
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
更新@ Luca Angeletti Swift 3.0.1の回答
extension String {
func image() -> UIImage? {
let size = CGSize(width: 30, height: 35)
UIGraphicsBeginImageContextWithOptions(size, false, 0);
UIColor.white.set()
let rect = CGRect(Origin: CGPoint(), size: size)
UIRectFill(CGRect(Origin: CGPoint(), size: size))
(self as NSString).draw(in: rect, withAttributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 30)])
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
@Luca Angelettiソリューションが本当に気に入った。透明な背景について、@ jonauzと同じ質問をしました。そのため、この小さな変更を加えると、同じことが背景色が明確になります。
コメントで回答する担当者がいませんでした。
import UIKit
extension String {
func emojiToImage() -> UIImage? {
let size = CGSize(width: 30, height: 35)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
UIColor.clear.set()
let rect = CGRect(Origin: CGPoint(), size: size)
UIRectFill(CGRect(Origin: CGPoint(), size: size))
(self as NSString).draw(in: rect, withAttributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 30)])
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
以下は、更新された回答と次の変更点です。
draw(at:withAttributes:)
の代わりに draw(in:withAttributes:)
を使用=結果のUIImage内のテキストを中央揃えにするためsize(withAttributes:)
を使用して、実際のサイズと相関するサイズのUIImageを作成します。フォント。import UIKit
extension String {
func textToImage() -> UIImage? {
let nsString = (self as NSString)
let font = UIFont.systemFont(ofSize: 1024) // you can change your font size here
let stringAttributes = [NSFontAttributeName: font]
let imageSize = nsString.size(attributes: stringAttributes)
UIGraphicsBeginImageContextWithOptions(imageSize, false, 0) // begin image context
UIColor.clear.set() // clear background
UIRectFill(CGRect(Origin: CGPoint(), size: imageSize)) // set rect size
nsString.draw(at: CGPoint.zero, withAttributes: stringAttributes) // draw text within rect
let image = UIGraphicsGetImageFromCurrentImageContext() // create image from context
UIGraphicsEndImageContext() // end image context
return image ?? UIImage()
}
}
UIGraphicsImageRenderer
を使用した@Luca Angelettiの回答の更新バージョン:
extension String {
func image() -> UIImage? {
let size = CGSize(width: 100, height: 100)
let rect = CGRect(Origin: CGPoint(), size: size)
return UIGraphicsImageRenderer(size: size).image { (context) in
(self as NSString).draw(in: rect, withAttributes: [.font : UIFont.systemFont(ofSize: 100)])
}
}
}