文档章节

四、python图像合并,打印图片

ssshen
 ssshen
发布于 2017/09/01 14:17
字数 452
阅读 24
收藏 0
点赞 0
评论 0

生活中肯定会遇到两张图片或多张合并成一张图片的情况,下面使用python+Pillow 实现这个目的。
代码:

import win32print
import win32ui
import win32con
from barcode.writer import ImageWriter
from barcode.codex import Code39
from PIL import Image, ImageDraw, ImageFont, ImageWin, ImageColor
from StringIO import StringIO
import os
def merge(self, image1, image2):
        '''
        实现垂直合并两张图片
        @param image1: 需要合并的第一张图片
        @param image2: 需要合并的第二张图片
        '''
        
        w1, h1 = image1.size
        w2, h2 = image2.size
        target = Image.new('RGB', (w1 if w1 > w2 else w2 , h1 + h2), (255, 255, 255, 0))
        temp = image1.resize((w1, h1), Image.ANTIALIAS)
        target.paste(temp, (0, 0, w1, h1))
        temp1 = image2.resize((w2, h2), Image.ANTIALIAS)
        target.paste(temp1, (0, h1, w2, h1 + h2))
        target.save('merge.png')
        
        target.show()
if __name__ == '__main__':
    printer_name = win32print.GetDefaultPrinter()
    print printer_name
    
    t = Test()
     
    t.merge(Image.open('t.png'), Image.open('image2.png'))

效果如下: 输入图片说明

打印图片,pywin32上的例子,为了方便,在这里在粘贴一遍

def imagePirnter(self):
        #
        # Constants for GetDeviceCaps
        #
        #
        # HORZRES / VERTRES = printable area
        #
        HORZRES = 8
        VERTRES = 10
        #
        # LOGPIXELS = dots per inch
        #
        LOGPIXELSX = 88
        LOGPIXELSY = 90
        #
        # PHYSICALWIDTH/HEIGHT = total area
        #
        PHYSICALWIDTH = 110
        PHYSICALHEIGHT = 111
        #
        # PHYSICALOFFSETX/Y = left / top margin
        #
        PHYSICALOFFSETX = 112
        PHYSICALOFFSETY = 113
        
        printer_name = win32print.GetDefaultPrinter ()
        file_name = "merge.png"
        
        #
        # You can only write a Device-independent bitmap
        #  directly to a Windows device context; therefore
        #  we need (for ease) to use the Python Imaging
        #  Library to manipulate the image.
        #
        # Create a device context from a named printer
        #  and assess the printable size of the paper.
        #
        hDC = win32ui.CreateDC ()
        hDC.CreatePrinterDC (printer_name)
        printable_area = hDC.GetDeviceCaps (HORZRES), hDC.GetDeviceCaps (VERTRES)
        printer_size = hDC.GetDeviceCaps (PHYSICALWIDTH), hDC.GetDeviceCaps (PHYSICALHEIGHT)
        printer_margins = hDC.GetDeviceCaps (PHYSICALOFFSETX), hDC.GetDeviceCaps (PHYSICALOFFSETY)
        
        #
        # Open the image, rotate it if it's wider than
        #  it is high, and work out how much to multiply
        #  each pixel by to get it as big as possible on
        #  the page without distorting.
        #
        bmp = Image.open (file_name)
#         if bmp.size[0] > bmp.size[1]:
#             bmp = bmp.rotate (90)
        
        ratios = [1.0 * printable_area[0] / bmp.size[0], 1.0 * printable_area[1] / bmp.size[1]]
        scale = min (ratios)
        
        #
        # Start the print job, and draw the bitmap to
        #  the printer device at the scaled size.
        #
        hDC.StartDoc (file_name)
        hDC.StartPage ()
        
        dib = ImageWin.Dib (bmp)
        scaled_width, scaled_height = [int (scale * i) for i in bmp.size]
        x1 = int ((printer_size[0] - scaled_width) / 2)
        y1 = int ((printer_size[1] - scaled_height) / 2)
        x2 = x1 + scaled_width
        y2 = y1 + scaled_height
        dib.draw (hDC.GetHandleOutput (), (x1, y1, x2, y2))
        
        hDC.EndPage ()
        hDC.EndDoc ()
        hDC.DeleteDC ()
if __name__ == '__main__':
    t = Test()
    t.imagePirnter()

效果如下:
输入图片说明

参考文章:
pywin32 win32print http://timgolden.me.uk/python/win32_how_do_i/print.html

© 著作权归作者所有

共有 人打赏支持
ssshen
粉丝 1
博文 32
码字总数 11112
作品 0
海淀
程序员
几个Python小案例,爱上Python编程!

Python是一种面向对象的解释型编程语言,源代码与解释器CPython遵守GPL协议,Python语法简洁清晰。 语法简洁清晰,那么我们用少量的Python代码能做哪些有趣的东西?温馨提示:文末必看。 一、...

qq1622479435
06/17
0
0
手把手教你用1行代码实现人脸识别 -- Python Face_recognition

环境要求: Ubuntu17.10 Python 2.7.14 环境搭建: 1. 安装 Ubuntu17.10(http://ftp.sjtu.edu.cn/ubuntu-cd/17.10/ubuntu-17.10-desktop-amd64.iso) > 安装步骤在这里(http://www.jianshu.c......

kangvcar
2017/10/26
0
34
import PIL (图像处理库)使用方法

PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。 from PIL import Image, ImageDraw Image 对于图像的各种操作 ImageDraw 模块提供了图像对象的简单2D绘制。用户可...

csdnhuaong
05/30
0
0
使用 OpenCV 进行高动态范围(HDR)成像

在本教程中,我们将学习如何使用由不同曝光设置拍摄的多张图像创建高动态范围High Dynamic Range(HDR)图像。 我们将以 C++ 和 Python 两种形式分享代码。 什么是高动态范围成像? 大多数数...

01%
06/17
0
0
python 数据可视化大全(matplotlib库、坐标系、标注、柱状图、等高线、3D、动画)

python的数据可视化教程,不包含seaborn的原生数据展示。 一、坐标系 限制坐标范围、取消边线颜色、确定坐标系原点 二、两种标注方法 三、散点图 四、 柱状图 五、等高线图 六、图片显示(二...

qwop446
2017/09/17
0
0
python opencv3实例(对象识别和增强现实)1-图像几何转换

python opencv3实例(对象识别和增强现实)1-图像几何转换 Published: 三 28 三月 2018 By andrew In python. 原书代码地址 在本

Python测试开发人工智能
07/04
0
0
两把王者荣耀的时间学会Python图片打码技能——「实验一小时」今晚开启!

关注「实验楼」,每天分享一个项目教程 「 实验一小时 」今晚开启,实验楼技术天团带你一小时做一个项目。 今晚 7:30 ,曾任职于腾讯、盛大等一线互联网公司的天火老师,将在B站带来免费直播...

moy37rqw1jarn33bgzk
04/18
0
0
由浅入深:教你如何构建一个行人目标检测模型(Python)

当我们看到一张图片时,我们的大脑会立即识别图片中所包含的物体。而对于机器来说,识别这些对象则需要耗费大量的时间和大量的训练数据。但是,随着深度学习和硬件技术的不断进步,目标检测在...

【方向】
07/04
0
0
python3+tesseract获取美股PEG图像上的数据

1. 缘起 投资了一点美股,总要参考个股资料的(虽然巴菲特老人家觉得分析技术资料没有用),发现一个一个查找,效率太低了。于是想起来用Python写个爬虫程序。话说,不偷懒的码农不是好的码农...

干土
06/10
0
0
用40行Python代码 实践高大上的人脸识别

前言 很多人都认为人脸识别是一项非常难以实现的工作,看到名字就害怕,然后心怀忐忑到网上一搜,看到网上N页的教程立马就放弃了。这些人里包括曾经的我自己。其实如果如果你不是非要深究其中...

j2iayu7y
04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

AngularJs $resource 高大上的数据交互

$resource 创建一个resource对象的工厂函数,可以让你安全的和RESFUL服务端进行数据交互。 需要注入 ngResource 模块。angular-resource[.min].js 默认情况下,末尾斜杠(可以引起后端服务器...

孟飞阳
10分钟前
0
0
打印斐波那契数

package com.jerry.ch04;public class PrintFibonacci {public static void main(String[] args) {for (int i=0; i<10; i++) {System.out.print(fib(i) + " ");}......

JerryNing
15分钟前
0
0
shell编程

一、shell脚本介绍

人在艹木中
16分钟前
0
0
istio 0.8 遥测 案例

==============遥测===================================== 演示如何从网格中收集遥测信息。 分布式跟踪。如何配置代理以向Zipkin或Jaeger发送跟踪请求 收集度量标准和日志。此任务说明如何配...

xiaomin0322
18分钟前
0
0
ND4J求多元线性回归以及GPU和CPU计算性能对比

上一篇博客《梯度下降法求多元线性回归及Java实现》简单了介绍了梯度下降法,并用Java实现了一个梯度下降法求回归的例子。本篇博客,尝试用dl4j的张量运算库nd4j来实现梯度下降法求多元线性回...

冷血狂魔
19分钟前
0
0
springboot常用注解

@SpringBootApplication: 包含@Configuration、@EnableAutoConfiguration、@ComponentScan 通常用在主类上。 @Service: 用于标注业务层组件。 @RestController: 用于标注控制层组件(如strut...

GoldenVein
25分钟前
1
0
如何进行大数据的入门级学习?

不知道你是计算机专业应届生还是已经从业者。总之,有java基础的学生学习大数据会轻松很多,零基础的小白都需要从java和linux学起。 如果你是一个学习能力特别强,而且自律性也很强的人的话可...

董黎明
39分钟前
0
0
使用Parcelable传递复杂参数

最近做AIDL传递对象,对象必须实现Parcelable的方法才可以被传递。 @Override    public int describeContents() {//这个 默认返回0就行了。        return 0;    }    ...

火云
40分钟前
0
0
十大Intellij IDEA快捷键

Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论。每个人都有自己的最爱,想排出个理想的榜单还真是困难。以前也整理过Intellij的快捷键,这次就按照我日常开发...

HJCui
50分钟前
0
0
word 使用mathtype 编写 数学公式

下载安装,这个链接命名。。。。 http://www.mathtype.cn/xiazai.html 安装之后会多出一个选项 使用内联方式插入图表 编写公式的界面 设置支持latex 语法 输入公式回车就可以看到结果...

阿豪boy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部