设为首页 收藏本站
查看: 881|回复: 0

[经验分享] 使用python拼接多张图片.二三事

[复制链接]

尚未签到

发表于 2015-11-30 14:45:21 | 显示全部楼层 |阅读模式
  前几日在博客上看到一篇“使用python拼接多张图片”的Blog【具体是能将的图片名字必须是形如xx_1.png ... xx_100.png或者xx_001.png ... xx_100.png,拼接成一张png图片,来达到一些目的(默认所有图片对应的顺序是文件名末尾序号的升序,序号可以不连续)】,自己也正想学习Python,觉得有趣就想试试。先是在windows上尝试了下,就遇到各种问题;正好有台mac(对mac也不熟悉),就想借机会也了解下mac。就copy了该短小精悍的代码...之后蛋疼的历程就惊现了(当然也是合理的,好如 基本功没学懂的人就强行修炼上乘的九阴真经一般,实在是很费力,弄不好就入魔了); 该python代码如下(命名为:margePng.py):



#!/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
start=filename.rfind('_')+1
end=filename.rfind('.')
file_no=int(filename[start:end])
index=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
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')
  使用mac自带的python 运行了之后就有问题了【没有 PIL库】:



ImportError: No module named PIL
  然后就开始搜索怎么解决,一般都是这样的答案:



1、下载PIL的Source Kit(因为这个包支持全部平台) Imaging--1.1.6.tar.gz
URL:  http://www.pythonware.com/products/pil/index.htm
2、解压缩包 tar -zxvf Imaging-1.1.6.tar.gz
3、进入到解压后的目录 cd Imaging-1.1.6
4、Build pakage: python setup.py build_ext -i
5、测试;  python selftest.py
6、安装 python setup.py install

  进行到第4步操作的时候就又出现了问题:



/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/tk.h:78:11: fatal error: 'X11/Xlib.h' file not found
#      include <X11/Xlib.h>
^
1 error generated.
error: command 'cc' failed with exit status 1
  继续搜索怎么解决,得到答案是需要安装 pip; 通过pip安装pil ; 好吧,do it 运行这个:



sudo easy_install pip
  【温馨说明: Pip 是安装python包的工具,提供了安装包,列出已经安装的包,升级包以及卸载包的功能。
                  Pip 是对easy_install的取代,提供了和easy_install相同的查找包的功能,因此可以使用easy_install安装的包也同样可以使用pip进行安装。
  Pip的安装可以通过源代码包,easy_install或者脚本。$ easy_install pip
  可是运行了之后就又出现了问题:



pip install Pil
Downloading/unpacking Pil  
Could not find any downloads that satisfy the requirement Pil  
Some externally hosted files were ignored (use --allow-external Pil to allow).  
Cleaning up...  
No distributions at all found for Pil  
Storing debug log for failure in /Users/macbook/Library/Logs/pip.log  
  经过了一次又一次的google或者度娘: 找到一篇详细的好文章:Mac OSX 10.9安装python Pillow
  于是开始安装Pillow:通过git下载源码地址https://github.com/python-imaging/Pillow  ( git clone https://github.com/python-imaging/Pillow.git  )
  因为有前车之鉴的提醒:此次没走太多的弯路【因为知道了这个编译成功需要libjpeg的支持】;
  所以就开始安装libjpeg : brew install libjpeg 【幸好先前发现mac 没有apt-get,就按照网上的分享,安装了安装brew】
  



curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --strip 1
  然后开始编译安装 :  python setup.py build_ext -i  
  安装成功之后重新编译pillow :



--------------------------------------------------------------------  
version      Pillow 2.4.0  
platform     darwin 2.7.5 (default, Aug 25 2013, 00:04:04)  
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)]  
--------------------------------------------------------------------  
--- TKINTER support available  
--- JPEG support available  
*** OPENJPEG (JPEG2000) support not available  
--- ZLIB (PNG/ZIP) support available  
*** LIBTIFF support not available  
--- FREETYPE2 support available  
*** LITTLECMS2 support not available  
*** WEBP support not available  
*** WEBPMUX support not available  
--------------------------------------------------------------------  
  测试一下 : python selftest.py



--------------------------------------------------------------------  
Pillow 2.4.0 TEST SUMMARY   
--------------------------------------------------------------------  
Python modules loaded from /Users/macbook/yyang/app-devel-source/python/Pillow/PIL  
Binary modules loaded from /Users/macbook/yyang/app-devel-source/python/Pillow/PIL  
--------------------------------------------------------------------  
--- PIL CORE support ok  
--- TKINTER support ok  
--- JPEG support ok  
*** JPEG 2000 support not installed  
--- ZLIB (PNG/ZIP) support ok  
*** LIBTIFF support not installed  
--- FREETYPE2 support ok  
*** LITTLECMS2 support not installed  
*** WEBP support not installed  
--------------------------------------------------------------------  
Running selftest:  
--- 57 tests passed.
  执行了下安装;



sudo python setup.py install  
  OK,竟然奇迹般的OK了。好,终于安装成功了【内心波涛汹涌:基本功很重要哇】
  
  然后就再次运行该copy的代码:我擦又有问题出现了[生成的png有问题打不开]报错如下?



Traceback (most recent call last):
File "margePng.py", line 44, in <module>
final_img.save('merged_test.png')
File "build/bdist.macosx-10.10-intel/egg/PIL/Image.py", line 1682, in save
File "build/bdist.macosx-10.10-intel/egg/PIL/PngImagePlugin.py", line 735, in _save
File "build/bdist.macosx-10.10-intel/egg/PIL/ImageFile.py", line 473, in _save
File "build/bdist.macosx-10.10-intel/egg/PIL/Image.py", line 434, in _getencoder
IOError: encoder zip not available
  因为之前安装了libjpeg,就猜测性的将最后一句: final_img.save('merged.png') 改为了  final_img.save('merged.jpeg');好吧,这样竟然的确生成了拼接好的jpeg格式的图!!!
  将代码改回原来的,再来按照网上的fix方法:



wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz  
tar xvfz Imaging-1.1.7.tar.gz  
cd Imaging-1.1.7  
python setup.py build_ext -i  
python setup.py install  
  之后运行 python margePng.py;问题依旧,(⊙o⊙)…!
  
  继续搜索网上遇到这种问题的解决办法:http://www.tuicool.com/articles/QjEvm2 说多需要安装ZLIB。OK install it
  下载地址:http://www.zlib.net/  ;download taar 之后运行下面代码



./configure
make
make install
  卸载了之前安装的pillow后重新install了,跑了下那段代码。问题还是没有解决。(⊙o⊙)…
  罢了罢了: 基本功了解的不扎实,已入魔道了。还是从基础学起吧,待的来日弄清了问题所在再将其 补录于此!
  
  参考Blog文章: Here and Mac OSX 10.9安装python Pillow

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145474-1-1.html 上篇帖子: Python requests模拟登录 下篇帖子: 利用python爬取海量疾病名称百度搜索词条目数的爬虫实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表