文档章节

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

ssshen
 ssshen
发布于 2017/09/01 14:17
字数 452
阅读 32
收藏 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
粉丝 2
博文 34
码字总数 12481
作品 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
[雪峰磁针石博客]python库介绍-图像处理工具pillow中文文档-手册(2018 5.*)

概述 Python Imaging Library给Python解释器增加了图像处理能力。 该库提供了广泛的文件格式支持,高效的内部展现,以及十分强大的图像处理能力。 核心图像库专为以几种存储为基本像素格式数...

书籍寻找
09/10
0
0
[Python图像处理] 三.获取图像属性、兴趣ROI区域及通道处理

版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/82177300 该系列文章是讲解Python OpenCV图像处理知识,前...

Eastmount
08/29
0
0
有轻功:用3行代码让Python数据处理脚本获得4倍提速

Python是一门非常适合处理数据和自动化完成重复性工作的编程语言,我们在用数据训练机器学习模型之前,通常都需要对数据进行预处理,而Python就非常适合完成这项工作,比如需要重新调整几十万...

爱喵的程序员
07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Vavr User Guide中英对照版

Vavr User Guide(Vavr用户指南) Daniel Dietrich, Robert Winkler - Version 0.9.2,2018-10-01 0. Vavr Vavr是Java 8 的对象函数式扩展,目标是减少代码行数,提高代码质量,提供了持久化集合...

白石
27分钟前
1
0
Spark2.40 Streaming编程指南

Spark Streaming编程指南 概观 一个快速的例子 基本概念 链接 初始化StreamingContext 离散流(DStreams) 输入DStreams和Receivers DStreams的转换 DStreams的输出操作 DataFrame和SQL操作 ...

天天爬网
28分钟前
0
0
oozie 调度pyspark

http://www.learn4master.com/big-data/pyspark/run-pyspark-on-oozie

MPRO
31分钟前
1
0
转:文件系统read,write缓存,有点意思

当我们在linux系统下写程序的时候,经常会读文件或者写文件,既然要操作文件,就会用文件操作函数,其中涉及读写的不乏有read/write或者fread/fwrite,但是我们应该选择哪一种呢,少安毋躁,...

臧教授
36分钟前
1
0
通过示例学习Javascript闭包

译者按: 在上一篇博客,我们通过实现一个计数器,了解了如何使用闭包(Closure),这篇博客将提供一些代码示例,帮助大家理解闭包。 原文: JavaScript Closures for Dummies 译者: Fundebug 为...

Fundebug
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部