[关闭]
@lm911 2019-10-24T02:49:09.000000Z 字数 6558 阅读 2151

linux 下图片添加水印

转载



利用ImageMagicK给图片加水印

1 图片水印处理

假设把名为logo.gif的水印图标添加在原始图片(src.jpg)右下角,且水印的下边缘距原始图片10像素、右边缘距原始图片5像素。使用如下命令即可:

convert src.jpg logo.gif -gravity southeast -geometry +5+10 -composite dest.jpg

2 文字水印处理

如果不含中文字符,可以直接通过convert draw text的方式将文字添加到图片,否则就需要使用其它的办法。命令行中不能包括中文字符,但是能通过读取文件的方式来操作,即先把中文信息保存文本文件中。注意:文本文件的编码最好用UTF-8,同时也需要选取一个支持中文的字体。直接把文本文本中的信息输出到图片上使用命令mogrify,不过也可以使用convert命令把文本文件中的信息生成一个图片,然后再把图片合成到原始图片中。下面分别介绍这几种方法。

convert src.jpg -gravity southeast -fill black -pointsize 16 -draw "text 5,5 'http://www.cnblogs.com/dying'" dest-c.jpg
mogrify -pointsize 16 -fill black -weight bolder -gravity southeast -annotate +5+5 "http://www.cnblogs.com/dying" src.jpg

说明:上述两条命令达到同样的结果,但是第一次命令可以保留原始图片,第二条是直接在原始图片上打上水印。

  1. 方法1
  2. //把文件t.txt中的信息生成图片txt.png, -transparent white让图片的背景透明,-size x30设置图片的高度,-pointsize设置字体大小,-font设置字体 alpha 参数是介于 0.0(完全透明)与 1.0(完全不透明)的数字
  3. convert -transparent white -font msyh.ttf -fill black -pointsize 24 label:@t.txt txt.png
  4. //把txt.png合成到src.jpg上
  5. convert src.jpg txt.png -gravity southeast -geometry +10+5 -composite dest.jpg
  6. 方法2
  7. convert src.jpg -transparent white -font msyh.ttf -fill black -pointsize 24 -size x30 label:@t.txt -gravity southeast -geometry +10+5 -composite dest.jpg
  8. //southeast 图片的东南方向 上北下南左西右东
  9. 方法3
  10. mogrify -font msyh.ttf -pointsize 24 -fill white -weight bolder -gravity southeast -annotate +20+20 @"t.txt" src.jpg
  11. //#去掉白色背景
  12. convert Small_ADR25.jpg -channel RGBA -fuzz 18% -fill none -floodfill +0+0 white 2.png

说明:上述第一、二种方法都有瑕疵,第二种背景不能变成透明,第一种虽然生成的图片可以透明,但是合成到原始图上效果不是很理想,第三种是完全透明的,所以推进用第三种方式来操作。

pointsize 设置水印字体大小
draw "text 5,5" 设置水印位置


添加水印详细案例分析

需求 ① :给图片居中加上透明文本水印

  1. convert -draw 'text 0,0 "研发部"' -fill 'rgba(221, 34, 17, 0.25)' -pointsize 36 -font '/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc' -gravity center ddd.jpg 1234.jpg

需求 ② :给图片加上倾斜平铺透明文本水印。

  1. convert -size 100x100 xc:none -fill '#d90f02' -pointsize 18 -font '/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc' -gravity center -draw 'rotate -45 text 0,0 "姓名:大的\n部门:研发部"' -resize 60% miff:- | composite -tile -dissolve 25 - ddd.jpg watermark.jpg
解释: 文本平铺水印其实是将文本画成一张png图片,然后用这张透明图片在目标图片上进行平铺。

实际测试(方德系统)中错误处理

错误描述1 : @ error/property.c/InterpretImageProperties/3405.
解决方案 : 解决方案

         打开/etc/ImageMagick-6/policy.xml 文件
         注释 `<policy domain="path" rights="none" pattern="@*" />` 这行

错误描述2 :convert-im6.q16: DistributedPixelCache '127.0.0.1' @ error/distribute-cache.c/ConnectPixelCacheServer/244.
解决方案 : 解决方案

        打开/etc/ImageMagick-6/policy.xml 文件
        修改<policy domain="resource" name="memory" value="256MiB"/>

PDF 转图片

convert xxx.pdf img_name.jpg

然后就会生成 img_name-0.jpg, img_name-1.jpg等,图片的数量是和pdf页数一致的。(这里我用的是 jpg格式 当然你可以选择其它格式)

如果你只需要转换pdf文件中其中一页或者几页:

convert xxx.pdf[0] img_name.jpg

类似于索引操作,0就表示第一页,依次类推。

还可以指定图片的参数:

convert -resize 1800x -density 150 -quality 100 xxx.pdf img_name.jpg

ImageMagick 的基本使用就是这样了,想学习更多可以去官网查资料.

补充一下:
convert 命令直接把pdf 转换为图片,是依赖的 ghostscript 库, ghostscript 是可以单独进行图片转换,而 convert 在安装ghostscript 之前,只能进行单独的图片处理,不能直接转换 pdf 为图片。

ghostscript 可以直接安装, fedora28下的包名:

ghostscript.x86_64 : Interpreter for PostScript language & PDF

安装命令:

sudo dnf install ghostscript


64位linux下,C程序调用 ImageMagick API方法


相关文档

ImageMagick简介、GraphicsMagick、命令行使用示例


linux 下利用PDFtk 给PDF加水印

tain添加PDF背景水印或前景

pdftk in.pdf background back.pdf output out.pdf

Python添加pdf水印

创建水印PDF

创建文字水印pdf文件

  1. #encoding=utf-8
  2. #author: walker
  3. #date: 2014-03-17
  4. #function: 创建文字水印pdf
  5. from reportlab.pdfgen import canvas
  6. from reportlab.lib.units import cm
  7. def create_watermark(content):
  8. #默认大小为21cm*29.7cm
  9. c = canvas.Canvas("mark.pdf", pagesize = (30*cm, 30*cm))
  10. #移动坐标原点(坐标系左下为(0,0))
  11. c.translate(10*cm, 5*cm)
  12. #设置字体
  13. c.setFont("Helvetica", 80)
  14. #指定描边的颜色
  15. c.setStrokeColorRGB(0, 1, 0)
  16. #指定填充颜色
  17. c.setFillColorRGB(0, 1, 0)
  18. #画一个矩形
  19. c.rect(cm, cm, 7*cm, 17*cm, fill=1)
  20. #旋转45度,坐标系被旋转
  21. c.rotate(45)
  22. #指定填充颜色
  23. c.setFillColorRGB(0.6, 0, 0)
  24. #设置透明度,1为不透明
  25. c.setFillAlpha(0.3)
  26. #画几个文本,注意坐标系旋转的影响
  27. c.drawString(3*cm, 0*cm, content)
  28. c.setFillAlpha(0.6)
  29. c.drawString(6*cm, 3*cm, content)
  30. c.setFillAlpha(1)
  31. c.drawString(9*cm, 6*cm, content)
  32. #关闭并保存pdf文件
  33. c.save()
  34. create_watermark('walker')

创建图片水印pdf

  1. #encoding=utf-8
  2. #author: walker
  3. #date: 2014-03-17
  4. #function: 创建图片水印pdf
  5. from reportlab.pdfgen import canvas
  6. from reportlab.lib.units import cm
  7. def create_watermark(f_jpg):
  8. f_pdf = 'mark.pdf'
  9. w_pdf = 20*cm
  10. h_pdf = 20*cm
  11. c = canvas.Canvas(f_pdf, pagesize = (w_pdf, h_pdf))
  12. c.setFillAlpha(0.3) #设置透明度
  13. print c.drawImage(f_jpg, 7*cm, 7*cm, 6*cm, 6*cm) #这里的单位是物理尺寸
  14. c.save()
  15. create_watermark('eg.png')

添加水印

  1. #encoding=utf-8
  2. #author: walker
  3. #date: 2014-03-18
  4. #function:给pdf添加水印
  5. from PyPDF2 import PdfFileWriter, PdfFileReader
  6. from reportlab.pdfgen import canvas
  7. #所有路径为绝对路径
  8. def add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):
  9. pdf_output = PdfFileWriter()
  10. input_stream = file(pdf_file_in, 'rb')
  11. pdf_input = PdfFileReader(input_stream)
  12. # PDF文件被加密了
  13. if pdf_input.getIsEncrypted():
  14. print '该PDF文件被加密了.'
  15. # 尝试用空密码解密
  16. try:
  17. pdf_input.decrypt('')
  18. except Exception, e:
  19. print '尝试用空密码解密失败.'
  20. return False
  21. else:
  22. print '用空密码解密成功.'
  23. # 获取PDF文件的页数
  24. pageNum = pdf_input.getNumPages()
  25. #读入水印pdf文件
  26. pdf_watermark = PdfFileReader(file(pdf_file_mark, 'rb'))
  27. # 给每一页打水印
  28. for i in range(pageNum):
  29. page = pdf_input.getPage(i)
  30. page.mergePage(pdf_watermark.getPage(0))
  31. page.compressContentStreams() #压缩内容
  32. pdf_output.addPage(page)

cendos 下安装 PyPDF2

python –version
CentOS6.5默认安装的Python版本是2.6.6,返回值为:Python 2.6.6

yum install -y python-setuptools
安装完毕后,easy_install命令就可以使用了。

easy_install pip
通过easy_install安装pip是最为简单的方法。pip默认安装到/usr/bin目录下。

执行easy_install pip 报错:

No local packages or download links found for pip
error: Could not find suitable distribution for Requirement.parse('pip')

解决方法:

重新安装curl的证书:

  1. curl 'https://bootstrap.pypa.io/get-pip.py' > get-pip.py
  2. sudo python get-pip.py
  1. sudo pip install PyPDF2

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注