@lm911
2019-10-24T02:49:09.000000Z
字数 6558
阅读 2151
转载
假设把名为logo.gif的水印图标添加在原始图片(src.jpg)右下角,且水印的下边缘距原始图片10像素、右边缘距原始图片5像素。使用如下命令即可:
convert src.jpg logo.gif -gravity southeast -geometry +5+10 -composite dest.jpg
如果不含中文字符,可以直接通过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://把文件t.txt中的信息生成图片txt.png, -transparent white让图片的背景透明,-size x30设置图片的高度,-pointsize设置字体大小,-font设置字体 alpha 参数是介于 0.0(完全透明)与 1.0(完全不透明)的数字convert -transparent white -font msyh.ttf -fill black -pointsize 24 label:@t.txt txt.png//把txt.png合成到src.jpg上convert src.jpg txt.png -gravity southeast -geometry +10+5 -composite dest.jpg方法2: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//southeast 图片的东南方向 上北下南左西右东方法3:mogrify -font msyh.ttf -pointsize 24 -fill white -weight bolder -gravity southeast -annotate +20+20 @"t.txt" src.jpg//#去掉白色背景convert Small_ADR25.jpg -channel RGBA -fuzz 18% -fill none -floodfill +0+0 white 2.png
说明:上述第一、二种方法都有瑕疵,第二种背景不能变成透明,第一种虽然生成的图片可以透明,但是合成到原始图上效果不是很理想,第三种是完全透明的,所以推进用第三种方式来操作。
pointsize 设置水印字体大小
draw "text 5,5" 设置水印位置
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
draw:绘图选项,text 声明绘制文本,0,0声明文本距离图片左上角的偏移值,"研发部"声明绘制的文本,最好用引号包裹起来,避免输入特殊字符引起错误。绘制文本的格式为 text x,y string,当然还可以绘制其他类型,诸如圆 ( circle )、折线 ( polyline )。
fill:对文本填充颜色,貌似 ImageMagick 命令中前面的选项是用来控制后面的选项的,所以应该把这样的修饰选项放到 -draw 前面比较好,很重要,后面的案例就是这样的。
pointsize:指定文本的字体大小。
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"/>
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
ImageMagick简介、GraphicsMagick、命令行使用示例
pdftk in.pdf background back.pdf output out.pdf
#encoding=utf-8#author: walker#date: 2014-03-17#function: 创建文字水印pdffrom reportlab.pdfgen import canvasfrom reportlab.lib.units import cmdef create_watermark(content):#默认大小为21cm*29.7cmc = canvas.Canvas("mark.pdf", pagesize = (30*cm, 30*cm))#移动坐标原点(坐标系左下为(0,0))c.translate(10*cm, 5*cm)#设置字体c.setFont("Helvetica", 80)#指定描边的颜色c.setStrokeColorRGB(0, 1, 0)#指定填充颜色c.setFillColorRGB(0, 1, 0)#画一个矩形c.rect(cm, cm, 7*cm, 17*cm, fill=1)#旋转45度,坐标系被旋转c.rotate(45)#指定填充颜色c.setFillColorRGB(0.6, 0, 0)#设置透明度,1为不透明c.setFillAlpha(0.3)#画几个文本,注意坐标系旋转的影响c.drawString(3*cm, 0*cm, content)c.setFillAlpha(0.6)c.drawString(6*cm, 3*cm, content)c.setFillAlpha(1)c.drawString(9*cm, 6*cm, content)#关闭并保存pdf文件c.save()create_watermark('walker')
#encoding=utf-8#author: walker#date: 2014-03-17#function: 创建图片水印pdffrom reportlab.pdfgen import canvasfrom reportlab.lib.units import cmdef create_watermark(f_jpg):f_pdf = 'mark.pdf'w_pdf = 20*cmh_pdf = 20*cmc = canvas.Canvas(f_pdf, pagesize = (w_pdf, h_pdf))c.setFillAlpha(0.3) #设置透明度print c.drawImage(f_jpg, 7*cm, 7*cm, 6*cm, 6*cm) #这里的单位是物理尺寸c.save()create_watermark('eg.png')
#encoding=utf-8#author: walker#date: 2014-03-18#function:给pdf添加水印from PyPDF2 import PdfFileWriter, PdfFileReaderfrom reportlab.pdfgen import canvas#所有路径为绝对路径def add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):pdf_output = PdfFileWriter()input_stream = file(pdf_file_in, 'rb')pdf_input = PdfFileReader(input_stream)# PDF文件被加密了if pdf_input.getIsEncrypted():print '该PDF文件被加密了.'# 尝试用空密码解密try:pdf_input.decrypt('')except Exception, e:print '尝试用空密码解密失败.'return Falseelse:print '用空密码解密成功.'# 获取PDF文件的页数pageNum = pdf_input.getNumPages()#读入水印pdf文件pdf_watermark = PdfFileReader(file(pdf_file_mark, 'rb'))# 给每一页打水印for i in range(pageNum):page = pdf_input.getPage(i)page.mergePage(pdf_watermark.getPage(0))page.compressContentStreams() #压缩内容pdf_output.addPage(page)
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的证书:
curl 'https://bootstrap.pypa.io/get-pip.py' > get-pip.pysudo python get-pip.py
sudo pip install PyPDF2