写机器学习相关博文,经常会碰到很多公式,而Latex正式编辑公式的利器。目前国内常用的博客系统,好像只有博客园支持,所以当初选择落户博客园。我现在基本都是用Latex写博文,然后要发表到博客园上与大家共享,就又得经历一番功夫:首先,将Latex源码拷贝到博文的HTML源码编辑器中;然后,修改部分HTML不支持的Latex源码,使得最后的博文跟我生成的PDF文档几乎一摸一样。这里面设计到图标的引用,论文的引用,文字颜色的调整,部分段落的标号等一些列问题。一旦文档有些长了,做这些工作就挺让人郁闷的。最讨厌的是,发现最后修改完工的HTML显示出来的文章也很部美观,而且文字大小和标题什么的也会随着博客主题的变化而变化,就美观性而言完全比不上Latex生成的PDF。对于我这种比较挑剔的人,我还希望看到的东西都是很美的,即便是博文!人嘛,都是有惰性的,我愿意跟大家分享学习的心得,但是不想把太多时间浪费在这些琐碎的事情上面。

  人都是有惰性的,请原谅我总是有那么些偷懒的点子。那么如何非常便捷的将PDF文档的内容与大家共享呢?貌似没有博客支持直接浏览PDF文档的,但是几乎所有博客都支持图片。所以,我们可以用Adobe之类的软件将PDF转成JPG或PNG等格式的图片,但是转换得到的是每一页PDF对应一张图片。我甚至懒得将那十几页的图片一个个上传到博文中,然后如图图片大小不合适的话还得挨个调整,着实没有这个耐心啦!我希望可以直接有个工具帮我合并这些所有的图片。想了想,貌似没有现成的工具可用用。不过好像不难,自己完全可以搞定的。上述这些原因,也就促成了这篇短小的博文。

  我计划以后的博文都如下操作:

  1. 用Latex写原始博文,生成PDF文档;
  2. 将PDF转成高清的PNG格式的图片;
  3. 将多个PNG格式的图片合并成一大张图片;
  4. 将最终的大图片直接上传到博文编辑器中
  5. 啊哈,大功告成!

  如何将PDF文档转换成其他的图片格式呢?我建议windowns下可用Adobe  Acrobat X Pro软件完成这个工作,操作步骤如下面两图所示。注意在图二中一定要自己指定一个分辨率,不用用自动的,否则生成的图片大小会有差异的。就我的多次尝试来看,分辨率设置得太大了,虽然图片放大后仍然很清晰,但是贴到博文中仍然需要不断地调整大小,选择“59.06像素/厘米”就非常合适了;彩色空间最好还是选择RGB吧,如果选自动的生成的图片的通道数目可能会不一样。需要注意的是,博客的主题要选那种供博文显示的页面比较宽的,否则贴图片上去也不怎么好看的。这样做的弊端在哪呢?最明显的就是其他用户通过搜索引擎查找某些关键词的方式搜到博文的概率要降低很多。弥补的方式就是把博文的摘要、标题和Tag信息好好写一下,尤其是摘要部分。

  将PDF文档用Adobe Acrobat X Pro另存为图片后,就会在PDF文档所在的目录下生成一系列的名为“PDFfilename_页面_XX.png"的一系列图片。我们接下来的任务就是要将这些图片合并成一张图片。我选用了强大便捷的Python来完成这项任务。刚开始用matplotlib库来操作,可是最终发现matplotlib中的保存图片的函数(无论是Image.imsave()还是pyplot.imsave())都有一定的限制,那就是图片的长或宽都不能超过32768。这个限制让我很不满意,继续尝试其他的图像操作的库,最终发现PIL库不存在这个限制,问题也得到了解决。下面这段Python代码默认所有图片对应的顺序是文件名末尾序号的升序,序号可以不连续,能处理的图片名字必须是形如xx_1.png ... xx_100.png或者xx_001.png ... xx_100.png。最后短小精悍的Python代码如下:

  1. #!/usr/bin/python3
  2. #encoding=utf-8
  3.  
  4. import numpy as np
  5. from PIL import Image
  6. import glob,os
  7.  
  8. if __name__=='__main__':
  9. prefix=input('Input the prefix of images:')
  10. files=glob.glob(prefix+'_*')
  11. num=len(files)
  12.  
  13. filename_lens=[len(x) for x in files] #length of the files
  14. min_len=min(filename_lens) #minimal length of filenames
  15. max_len=max(filename_lens) #maximal length of filenames
  16. if min_len==max_len:#the last number of each filename has the same length
  17. files=sorted(files) #sort the files in ascending order
  18. else:#maybe the filenames are:x_0.png ... x_10.png ... x_100.png
  19. index=[0 for x in range(num)]
  20. for i in range(num):
  21. filename=files[i]
  22. start=filename.rfind('_')+1
  23. end=filename.rfind('.')
  24. file_no=int(filename[start:end])
  25. index[i]=file_no
  26. index=sorted(index)
  27. files=[prefix+'_'+str(x)+'.png' for x in index]
  28.  
  29. print(files[0])
  30. baseimg=Image.open(files[0])
  31. sz=baseimg.size
  32. basemat=np.atleast_2d(baseimg)
  33. for i in range(1,num):
  34. file=files[i]
  35. im=Image.open(file)
  36. im=im.resize(sz,Image.ANTIALIAS)
  37. mat=np.atleast_2d(im)
  38. print(file)
  39. basemat=np.append(basemat,mat,axis=0)
  40. final_img=Image.fromarray(basemat)
  41. final_img.save('merged.png')

  

Python拼接多张图片的更多相关文章

  1. 使用python拼接多张图片.二三事

    前几日在博客上看到一篇“使用python拼接多张图片”的Blog[具体是能将的图片名字必须是形如xx_1.png ... xx_100.png或者xx_001.png ... xx_100.png,拼 ...

  2. 使用Python拼接多张图片

    写机器学习相关博文,经常会碰到很多公式,而Latex正式编辑公式的利器.目前国内常用的博客系统,好像只有博客园支持,所以当初选择落户博客园.我现在基本都是用Latex写博文,然后要发表到博客园上与大家 ...

  3. 如何用python下载一张图片

    如何用python下载一张图片 这里要用到的主要工具是requests这个工具,需要先安装这个库才能使用,该库衍生自urllib这个库,但是要比它更好用.多数人在做爬虫的时候选择它,是个不错的选择. ...

  4. python拼接字符串方法汇总

    python拼接字符串一般有以下几种方法: 1.直接通过(+)操作符拼接 s = 'Hello'+' '+'World'+'!' print(s) 输出结果:Hello World! 这种方式最常用. ...

  5. python拼接字符串

    python拼接字符串一般有以下几种方法: 1.直接通过(+)操作符拼接 s = 'Hello' + ' ' + 'World' + '!' print(s) 输出结果:Hello World! 使用 ...

  6. Python拼接字符串的七种方式

    忘了在哪看到一位编程大牛调侃,他说程序员每天就做两件事,其中之一就是处理字符串.相信不少同学会有同感. 几乎任何一种编程语言,都把字符串列为最基础和不可或缺的数据类型.而拼接字符串是必备的一种技能.今 ...

  7. Python 拼接字符串的几种方式

    在学习Python(3x)的过程中,在拼接字符串的时候遇到了些问题,所以抽点时间整理一下Python 拼接字符串的几种方式. 方式1,使用加号(+)连接,使用加号连接各个变量或者元素必须是字符串类型( ...

  8. Python将多张图片进行合并拼接

    import PIL.Image as Image import os IMAGES_PATH = r'D:\pics22223\\' # 图片集地址 IMAGES_FORMAT = ['.jpg', ...

  9. python拼接变量、字符串的3种方法

    第一种,加号(“+”): print 'py'+'thon' # output python str = 'py' print str+'thon' # output python 第二种 ,空格: ...

随机推荐

  1. selenium打开带有扩展的chrome

    每当用跑用例失败的时候,第一反应就是查看元素定位是不是正确,帮助定位的扩展是必不可少的,但是selenium一般打开的是不带扩展的干净的浏览器,如果操作步骤很长的话,就得手动去执行直到那一步去检查元素 ...

  2. Tableau学习笔记之三

    1.Tableau可以连接多种多样的数据以及数据库,例如txt,xls,mdb,sql server,oracle等等 2.Tableau还可以从剪贴板上粘贴数据 3.维度和度量的理解: 1)维度即表 ...

  3. Ye.云狐J2刷机笔记 | 完美切换内部存储卡和SD卡的改法.vold.fstab

    ================================================================================Ye.完美切换内部存储卡和SD卡成功.v ...

  4. android string[] arraylist<string>互转

    string[] to arraylist<string>:eg:string[] str; arraylist<string> arr; for(int i=0;i<s ...

  5. Linux重复执行上条命令

    Linux系统下Shell重复执行上条命令的 4 种方法: 1.使用上方向键,并回车执行.2.按 !! 并回车执行.3.输入 !-1 并回车执行.4.按 Ctrl+P 并回车执行.

  6. 微信分享,使用js,分享给朋友,朋友圈,QQ微博

    <script> var imgUrl = "http://www.baidu.com/img/bdlogo.gif"; var lineLink = "ht ...

  7. NotePad++ delphi/Pascal函数过程列表插件

    从cnpack上爬下来的 函数过程列表 点击下载

  8. CSS 去掉IE10中type=password中的眼睛图标

    在IE10中,input[type=password],如果我们输入内容后,内容会变成圆点,这与以前一样,但后面多了一个眼睛图标,我们鼠标移过去按下会出现输入内容.有时我们想去掉这功能.IE10允许我 ...

  9. Oracle的回收站和闪回查询机制(二)

    上一篇中讲诉了Oracle中一些闪回查询(Flashback Query),这是利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照).要注意的是,Flashback Query仅仅是查询以前 ...

  10. HDU 4950 Monster (水题)

    Monster 题目链接: http://acm.hust.edu.cn/vjudge/contest/123554#problem/I Description Teacher Mai has a k ...