美文网首页
图片加水印

图片加水印

作者: kled_net | 来源:发表于2019-01-09 20:55 被阅读0次
  func getWaterMark(_ originalImage: UIImage?, title: String, andMark markFont: UIFont, andMark markColor: UIColor) -> UIImage? {
        let HORIZONTAL_SPACE: CGFloat = 30
        let VERTICAL_SPACE: CGFloat = 50
        var font: UIFont? = markFont
        if font == nil {
            font = UIFont.systemFont(ofSize: 23)
        }
        var color: UIColor? = markColor
        if color == nil {
            color = UIColor.blue
        }
        //原始image的宽高
        guard let viewWidth = originalImage?.size.width, let viewHeight = originalImage?.size.height else { return nil }
        //为了防止图片失真,绘制区域宽高和原始图片宽高一样
        UIGraphicsBeginImageContext(CGSize(width: viewWidth, height: viewHeight))
        //先将原始image绘制上
        originalImage?.draw(in: CGRect(x: 0, y: 0, width: viewWidth, height: viewHeight))
        //sqrtLength:原始image的对角线length。在水印旋转矩阵中只要矩阵的宽高是原始image的对角线长度,无论旋转多少度都不会有空白。
        let sqrtLength = sqrt(viewWidth * viewWidth + viewHeight * viewHeight)
        let attrStr = NSAttributedString(string: title, attributes: [NSAttributedString.Key.foregroundColor : markColor, NSAttributedString.Key.font: markFont])
        //绘制文字的宽高
        let strWidth = attrStr.size().width
        let strHeight = attrStr.size().height
        
        //开始旋转上下文矩阵,绘制水印文字
        let context = UIGraphicsGetCurrentContext()
        
        //将绘制原点(0,0)调整到源image的中心
        context?.concatenate(CGAffineTransform(translationX: viewWidth / 2, y: viewHeight / 2))
        //以绘制原点为中心旋转
        context?.concatenate(CGAffineTransform(rotationAngle: CGFloat(M_PI_2 / 3)))
        //将绘制原点恢复初始值,保证当前context中心和源image的中心处在一个点(当前context已经旋转,所以绘制出的任何layer都是倾斜的)
        context?.concatenate(CGAffineTransform(translationX: -viewWidth / 2, y: -viewHeight / 2))
        
        //计算需要绘制的列数和行数
        let horCount: Int = Int(sqrtLength / CGFloat(strWidth + HORIZONTAL_SPACE)) + 1
        let verCount: Int = Int(sqrtLength / CGFloat(strHeight + VERTICAL_SPACE)) + 1
        //此处计算出需要绘制水印文字的起始点,由于水印区域要大于图片区域所以起点在原有基础上移
        let orignX: CGFloat = -(sqrtLength - viewWidth) / 2
        let orignY: CGFloat = -(sqrtLength - viewHeight) / 2
        //在每列绘制时X坐标叠加
        var tempOrignX: CGFloat = orignX
        //在每行绘制时Y坐标叠加
        var tempOrignY: CGFloat = orignY
        for i in 0..<horCount * verCount {
            title.draw(in: CGRect(x: tempOrignX, y: tempOrignY, width: strWidth, height: strHeight), withAttributes: [NSAttributedString.Key.foregroundColor : markColor, NSAttributedString.Key.font: markFont])
            if i % horCount == 0 && i != 0 {
                tempOrignX = orignX
                tempOrignY += strHeight + VERTICAL_SPACE
            } else {
                tempOrignX += strWidth + HORIZONTAL_SPACE
            }
        }
        //根据上下文制作成图片
        let finalImg: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return finalImg
    }
效果图

相关文章

  • 图片加水印

    加文字水印 图片水印 给字体加颜色

  • 图片添加二维码水印教程

    本博客介绍一下用jdk awt实现图片加文字水印和图片水印的方法 一、图片文字水印 原来图片 加上文字水印后图片 ...

  • 图片加数字水印

    数字水印介绍 常见的图片水印多是在图片上附上文字、logo等信息,可以直观地看出来,除了这种水印外,好可以给图片加...

  • ios绘图实列

    1> 水印PPT简介 * 图片水印作用:防止他人盗取图片,加一些Logo,生成一张新的图片。 * 怎么生成新的图片...

  • FFmpeg滤镜(3)

    FFmpeg为视频加图片水印 1、movie滤镜 如图,通过movie读取图片文件作为水印,显示在x坐标30、y坐...

  • 推荐一波2018年一直舍不得删掉的APP推荐,超有趣+高逼格+很

    图片加文字秀 图片搭配文字的APP,提供图片加文字、文字生成图片、图片加水印、生成文字海报等。 迅捷CAD看图 免...

  • 水印

    图片水印文字 图片水印图片

  • python图片加文字水印

    用python做后端时,用户想要在下载的图片用打上相关个人信息,于是看了一下Pillow文档,简单的实现了功能。打...

  • uniapp 加图片水印示例

    1.需要先在view中增加一个canvas 2.这里的两个参数只需要关注第一个path就行了,为相册选择的图片地址...

  • 添加图片水印

    图片水印 水印:在图片上加的防止他人盗图的半透明logo、文字、图标 作用:主要是一些网站为了版权问题、广告而添加...

网友评论

      本文标题:图片加水印

      本文链接:https://www.haomeiwen.com/subject/nppwcqtx.html