四、python图像合并,打印图片
博客专区 > ssshen 的博客 > 博客详情
四、python图像合并,打印图片
ssshen 发表于4个月前
四、python图像合并,打印图片
  • 发表于 4个月前
  • 阅读 13
  • 收藏 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

标签: Pywin32
共有 人打赏支持
粉丝 2
博文 31
码字总数 10565
×
ssshen
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: