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

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

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

用Latex写原始博文,生成PDF文档;

将PDF转成高清的PNG格式的图片;

将多个PNG格式的图片合并成一大张图片;

将最终的大图片直接上传到博文编辑器中

啊哈,大功告成!

好了,如果将PDF文档转换成其他的图片格式呢?我建议windowns下可用Adobe  Acrobat X Pro软件完成这个工作,操作步骤如下面两图所示。注意在图二中一定要自己指定一个分辨率,不用用自动的,否则生成的图片大小会有差异的。就我的多次尝试来看,分辨率设置得太大了,虽然图片放大后仍然很清晰,但是贴到博文中仍然需要不断地调整大小,选择“59.06像素/厘米”就非常合适了。需要注意的是,博客的主题要选那种供博文显示的页面比较宽的,否则贴图片上去也不怎么好看的。

将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代码如下:

#!/usr/bin/python3

#encoding=utf-8

import numpy as np

from PIL import Image

import glob,os

if __name__=='__main__':

prefix=input('Input the prefix of images:')

files=glob.glob(prefix+'_*')

num=len(files)

filename_lens=[len(x) for x in files] #length of the files

min_len=min(filename_lens) #minimal length of filenames

max_len=max(filename_lens) #maximal length of filenames

if min_len==max_len:#the last number of each filename has the same length

files=sorted(files) #sort the files in ascending order

else:#maybe the filenames are:x_0.png ... x_10.png ... x_100.png

index=[0 for x in range(num)]

for i in range(num):

filename=files[i]

start=filename.rfind('_')+1

end=filename.rfind('.')

file_no=int(filename[start:end])

index[i]=file_no

index=sorted(index)

files=[prefix+'_'+str(x)+'.png' for x in index]

print(files[0])

baseimg=Image.open(files[0])

sz=baseimg.size

basemat=np.atleast_2d(baseimg)

for i in range(1,num):

file=files[i]

im=Image.open(file)

im=im.resize(sz,Image.ANTIALIAS)

mat=np.atleast_2d(im)

print(file)

basemat=np.append(basemat,mat,axis=0)

final_img=Image.fromarray(basemat)

final_img.save('merged.png')

python 图片拼接_使用Python拼接多张图片相关推荐

  1. 第一章 第一节:Python基础_认识Python

    Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...

  2. 动态照片墙 python 实现_利用python生成照片墙的示例代码

    这篇文章主要介绍了利用python生成照片墙的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 PIL(Python Im ...

  3. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  4. python计算机_基础python计算机知识

    1.计算机基础知识 计算机基础 :组成---输入输出设备 储存器 CPU 内存 cpu 中央处理器 :处理各种数据的 内存 存储数据 硬盘 存储数据的 什么是操作系统:控制计算机的工作流程 软件 什么 ...

  5. excel python插件_利用 Python 插件 xlwings 读写 Excel

    Python 通过 xlwings 读取 Excel 数据 去年底公司让我做设备管理,多次委婉拒绝,最终还是做了.其实我比较喜欢技术.做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Exce ...

  6. 网络安全用python吗_使用Python进行网络安全渗透——密码攻击测试器

    相关文章: 本篇将会涉及: HTTP 基本认证 对HTTP Basic认证进行密码暴力攻击测试 什么是HTTP 基本认证 HTTP基本认证(HTTP Basic Authentication)是HTT ...

  7. python字符串_(Python基础教程之七)Python字符串操作

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  8. python 字符识别_使用python进行光学字符识别入门

    python 字符识别 语言模型设计 (Language Model Designing) Optical Character Recognition is the conversion of 2-D ...

  9. 如何用python赚钱_利用python能怎么挣钱

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 6年python,期间写了各种奇葩爬虫,挣各种奇葩的钱,写这篇文章总结下几种爬虫 ...

最新文章

  1. 做好准备迎接崭新的BCH了吗?
  2. 【转】Asp.net控件开发学习笔记整理篇 - Asp.net客户端状态管理
  3. 随机生成50个字段的elasticsearch的测试程序输入
  4. MVC框架浅析(基于PHP)
  5. 如何基于 K8s 构建下一代 DevOps 平台?
  6. 收藏!细胞增殖实验要点详解
  7. 容器资源需求、资源限制(二十二)
  8. python time 语句_python的time模块总结
  9. 如此理解面向对象编程
  10. 1.7更换JDK1.6版本后,无法启动eclipse mars解决办法。
  11. python 异常处理高级形式例子_Python 异常处理的实例详解
  12. somachine3.1 注册
  13. 关于python使用系统命令反弹shell的一点记录
  14. Idea设置豆沙绿(保护你的眼不瞎的密码)
  15. 【视频异常检测-论文阅读】Learning Not to Reconstruct Anomalies
  16. IPS(Intrusion Prevention System)入侵防护系统原理
  17. IBM X 345服务器无法从光驱启动配置解决方法——非常规方法
  18. 用PowerPoint巧做特效字幕(转)
  19. 股指的趋势持续研究(Hurst指数)
  20. WPS的Excel做一个下拉选择功能

热门文章

  1. 树莓派隐藏任务栏一种方法
  2. 计算机考研国家考试时间安排,计算机考研必知考试科目
  3. 数据结构视频教程 -《妙趣横生的算法(C语言实现)》
  4. 马化腾的焦虑和小程序的未来到底是什么?
  5. GEE系列:第9单元 在GEE中生成采样数据【随机采样】
  6. FILE *fp fopen 参数
  7. 4米乘以12米CAD图_新农村路灯4米6米8米12米太阳能路灯led太阳能景观灯
  8. 计算机辅助培训系统,UG NX7.5 计算机辅助培训系统CAST
  9. 5G如箭在弦,谁会是满弓的人?
  10. 北斗对时装置(GPS时间同步系统)应用安全追溯系统