在UIimage上绘制文本时文本大小不一样

问题描述 投票:0回答:3

我正在开发一个项目,我需要向来自文本字段的图像添加文本。

但是当我看到图像上的文本时,它显示的字体大小小于文本字段的字体大小。

我正在使用以下方法在图像上绘制文本

func drawText(text: String, inImage image: UIImage, atPoint point: CGPoint, fontName:String, fontSize: String,textColor: UIColor) -> UIImage? {

        UIGraphicsBeginImageContextWithOptions(image.size, true, UIScreen.mainScreen().scale)
        UIGraphicsBeginImageContext(image.size)

        image.drawInRect(CGRectMake(0, 0, image.size.width, image.size.height))
        let rect: CGRect = CGRectMake(point.x, point.y, image.size.width, image.size.height)
        // UIColor.whiteColor().set()

        // set the font to Helvetica Neue 18
        if let sizeFont = NSNumberFormatter().numberFromString(fontSize) {

            // TODO: - Need to resolve issue
            let originalSize = sizeFont.integerValue

            let finalFontSize = CGFloat(originalSize)

            let fieldFont = UIFont(name: fontName, size:finalFontSize*1.5)

            // set the line spacing to 6
            let paraStyle = NSMutableParagraphStyle()
            // paraStyle.lineSpacing = 6.0

            // set the Obliqueness to 0.1
            // let skew = 0.1

            let attributes: NSDictionary = [
                NSForegroundColorAttributeName: textColor,
               // NSParagraphStyleAttributeName: paraStyle,
                // NSObliquenessAttributeName: skew,
                NSFontAttributeName: fieldFont!
            ]

            NSString(string: text).drawInRect(rect, withAttributes: attributes as? [String : AnyObject])

            let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return newImage
        }

        return nil
    }

字体大小可以是16-60px。

请让我知道解决方案是什么。

谢谢

ios swift uiimage drawrect cgcontext
3个回答
3
投票

您的代码似乎一切都很好。
一个可能的问题是,您在

ImageView
中看不到全尺寸的图像,因为它会对其进行缩放,因此您看到的字体比您想要的要小。
您可以在在其上绘制文本之前调整图像大小,以适合将要显示的容器。 或者您可以将其与
fontSize
相乘来计算
1/scale
,再乘以
scale = the scale at will the image will be shown

例如,如果图像比大图像高并且容器(imageView)比图像比例小,则图像比例将为
image.size.height/imageView.frame.size.height

我认为这可以解决您的问题。


0
投票

正如 LorenzOliveto 所建议的,这可能是由于缩放问题造成的。一种简单的解决方法是将文本添加为 imageView 的子视图,然后使用此扩展将 imageView 转换为图像。

extension UIView {
    /**
     Convert UIView to UIImage
     */
    func toImage() -> UIImage {
        UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.isOpaque, 0.0)
        self.drawHierarchy(in: self.bounds, afterScreenUpdates: false)
        let snapshotImageFromMyView = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return snapshotImageFromMyView!
    }
}

0
投票

iOS 文本字体

我们运营下一个维度:

例如:

font.size = 11 pt = 33 px for retina
image.size = 200x200 px
imageView.size = 100x100 px

默认算法是下一个:

1. draw Font onto Image 
2. fit Image into ImageView

由于缩小,字体变小。更多关于不同图像的字体会有所不同(取决于图像尺寸)

作为一种变体,您可以动态计算字体:

extension UIImage {
    func getFont(size: CGFloat) {
        let screenWidth = UIScreen.main.bounds.size.width
        let imageWidth = self.size.width
        let k = imageWidth / screenWidth
        let fontSize: CGFloat = size * k
        let font = UIFont(name: "Courier", size: fontSize)
        return font
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.