當前位置:編程學習大全網 - 源碼下載 - 1.圖像裁剪、加邊框、旋轉(Python PIL)

1.圖像裁剪、加邊框、旋轉(Python PIL)

日常工作中經常要用Photoshop打印壹些地質圖,雖然說PS有動作錄制的功能,但是打印這個功能我嘗試過錄制動作後並未能成功運行,而且要打印的圖像尺寸很多都是不同的,試了幾次後就放棄了,直到後來Python學起來了,通過pywinauto庫實現了這個功能,在這裏就簡單記錄下吧。

在寫Photoshop的打印操作之前,先來回顧下打印之前的圖像處理工作。

接到的地質圖多為MapGIS程序導出的jpg圖片,偶爾也會有Tif格式的遙感圖。對這些圖像進行打印很簡單,基本流程是:用PS打開圖像->裁剪圖像四周空白邊緣->為圖像四周加上3cm寬白色邊框(為了美觀和裝訂的需要)->打印。那為啥用PS來打印不直接用Windows自帶打印呢,應該是打印需要用到PS特定的顏色處理模式吧,經過試驗,通過兩種方式打出來的色彩效果確實是不同的。

打印前圖像處理的主要目標很簡單:

1、裁剪圖像四周空白

2、為圖像四周加上3cm白色邊框

下面就用Python實現它們

圖像處理主要用的是PIL這個庫,中途由於單位電腦比較舊(4g內存Win7 32位系統,後來重裝成64位了,體驗就是搞這種東西必須整個64位系統),性能不太行了,也用Opencv整了下,還是感覺PIL稍微快那麽壹點點,不知道是不是錯覺呢。

(後來發現這兩步在PS錄個動作也能輕松完成())

壹、獲取所有圖片路徑

有時候要打印的圖片會放在好多個不同文件夾裏面,要把它們遍歷出來:

import os

二、讀取圖片並裁剪四周空白

import PIL

獲得了圖像尺寸後接下來就要對圖像進行邊緣空白的裁剪了(其實這兩步不分先後順序的):

裁剪的思路是網上搜到的,整理下就是:

1、先把圖像轉成灰度模式(值變成單壹的0-255以方便判斷,如果要裁剪其他顏色我就不知道了,我這裏只要裁掉最常見的由MapGIS導出的標準的白色邊緣)。

2、分別從四個方向掃描圖像,找到四個方向各自第壹個灰度值不為255(最純粹的白色())的像素,記下它的坐標(i,j)。

3、通過四組坐標大小比較,得到圖像除了四周空白區域外的坐標極值,也就得到了裁剪的區域左上(left,top)和右下坐標(right,bottom)。

4、利用PIL.Image.crop(),完成圖像的裁剪。

5、沒了,就是後來發現PIL自帶這個算法,引用壹下: 使用PIL裁剪圖片白邊

要是用PS來做呢,‘圖像-裁切-確定’就完事了。

三、給裁剪後的圖像加上x厘米的白色邊框

這壹步主要是為了打印出來的圖規範且美觀。

這壹步要是用PS來搞,‘圖像-畫布大小-設置相對的寬度和高度’ 就好了

四、判斷圖像是否需要旋轉。

為什麽要旋轉這些圖像呢?因為最終是要把它們用打印機打印出來,而打印機能打印的最大寬度是有限的,所以就有了這個步驟。

單位的打印機型號是惠普的HP DesignJet Z6200 60 英寸照片打印機,最大打印紙張寬度是60英寸,大約就是1524mm左右吧,除了最大尺寸外,日常還用到的紙張寬度有440、610、914、1067、1274等6、7種吧,所以出於節約打印時間和省錢的考慮,為每張圖選擇最合適的打印紙張寬度也是很有必要的。

判斷圖像是否需要旋轉的思路是這樣的:

1、比較圖像的寬和高,判斷誰是圖像的長邊和短邊。

2、短邊如果大於1524mm,這圖按1:1就打不出來了,超過打印機最大可裝入的紙張的寬度,把這個圖像文件放到Oversize_path路徑下,後續自己看著辦。

3、在短邊小於等於1524mm的前提下,根據對圖像寬高和長短邊的比較,有兩種需要旋轉的情況:

3.1 如果圖像的寬是長邊(矮胖的矩形),且寬大於1524mm,那麽這圖得旋轉90°;

3.2 如果圖像的高是長邊(瘦高的矩形),且高小於1524mm,那麽這圖也得旋轉90°。

*printTOtkinter()是個用tkinter搞的進度顯示窗口,就輸出下壹些文本信息而已。

五、為圖像選擇最合適的打印紙張尺寸

單位打印紙有438、610、914、1524等7種寬度,現在要選出最適合的壹種來進行打印。

在把短邊大於1524這種情況排除之後,剩下的圖像情況為短邊小於1524,即單位的打印機能打印出來了。

這時要判斷最佳打印用紙的寬度,有兩種情況需要考慮:

1、長邊>1524,改用短邊來比較選擇打印紙寬度。

2、長邊 ≤ 1524,用長邊來比較選擇打印紙寬度。

下面思路就是把要用作比較的邊長放入紙張寬度列表,把列表排序後找到比這個邊長大壹點的那個紙張寬度。

主要的步驟就是這些,再經過壹頓復制粘貼完善壹下其他細節之後,最後會得到壹個存放打印信息的列表,把它用txt存起來,這樣後面的PS批量打印需要的信息就全部搞到手了。最後放個gif。

  • 上一篇:Vxworks和Linux系統這2者的區別是什麽呢?
  • 下一篇:iOS8的越獄軟件源
  • copyright 2024編程學習大全網