如何切斷PNG圖像的空白邊框區域並使用Python將其縮小到最小尺寸?將PNG圖像裁剪爲最小尺寸
回答
im.getbbox()=> 4元組或無
計算圖像中的 非零區域的邊界框。邊界框返回爲4元組 ,定義左下角像素座標,右上角像素座標和右下角像素座標。如果圖像 完全爲空,則此方法 將返回無。
代碼示例,我試過了,我用bmp進行了測試,但它也適用於png。
>>> import Image
>>> im=Image.open("test.bmp")
>>> im.size
(364, 471)
>>> im.getbbox()
(64, 89, 278, 267)
>>> im2=im.crop(im.getbbox())
>>> im2.size
(214, 178)
>>> im2.save("test2.bmp")
https://gist.github.com/3141140
import Image
import sys
import glob
# Trim all png images with alpha in a folder
# Usage "python PNGAlphaTrim.py ../someFolder"
try:
folderName = sys.argv[1]
except :
print "Usage: python PNGPNGAlphaTrim.py ../someFolder"
sys.exit(1)
filePaths = glob.glob(folderName + "/*.png") #search for all png images in the folder
for filePath in filePaths:
image=Image.open(filePath)
image.load()
imageSize = image.size
imageBox = image.getbbox()
imageComponents = image.split()
if len(imageComponents) < 4: continue #don't process images without alpha
rgbImage = Image.new("RGB", imageSize, (0,0,0))
rgbImage.paste(image, mask=imageComponents[3])
croppedBox = rgbImage.getbbox()
if imageBox != croppedBox:
cropped=image.crop(croppedBox)
print filePath, "Size:", imageSize, "New Size:",croppedBox
cropped.save(filePath)
我認爲這是必要的,以補充@Frank克魯格的答案。他提出了一個很好的觀點,但它不包括如何從圖像中正確地裁剪額外的邊框顏色。我發現here。具體來說,我發現這有用:
from PIL import Image, ImageChops
def trim(im):
bg = Image.new(im.mode, im.size, im.getpixel((0,0)))
diff = ImageChops.difference(im, bg)
diff = ImageChops.add(diff, diff, 2.0, -100)
bbox = diff.getbbox()
if bbox:
return im.crop(bbox)
im = Image.open("bord3.jpg")
im = trim(im)
im.show()
雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/11453172) – niton 2016-02-29 21:55:00
修改爲包含特定的代碼。好點子。 – AaronJPung 2016-02-29 21:56:54
我今天有同樣的問題。這是我的解決方案來裁剪透明邊框。只需將此腳本與您的批處理.png文件一起放入您的文件夾:
from PIL import Image
import numpy as np
from os import listdir
def crop(png_image_name):
pil_image = Image.open(png_image_name)
np_array = np.array(pil_image)
blank_px = [255, 255, 255, 0]
mask = np_array != blank_px
coords = np.argwhere(mask)
x0, y0, z0 = coords.min(axis=0)
x1, y1, z1 = coords.max(axis=0) + 1
cropped_box = np_array[x0:x1, y0:y1, z0:z1]
pil_image = Image.fromarray(cropped_box, 'RGBA')
print(pil_image.width, pil_image.height)
pil_image.save(png_image_name)
print(png_image_name)
for f in listdir('.'):
if f.endswith('.png'):
crop(f)
- 1. 將圖像裁剪爲固定尺寸
- 2. 裁剪長尺寸圖像
- 3. 在node.js中將較大的圖像裁剪爲多種尺寸
- 4. Android:將圖像裁剪爲特定尺寸
- 5. 如何在裁剪之前裁剪大尺寸圖像而不裁剪?
- 6. 使用CSS調整圖像大小和裁剪尺寸
- 7. 在小尺寸上裁剪背景圖像
- 8. ImageView裁剪和縮放圖像到較小的尺寸
- 9. 將未知尺寸的圖像尺寸調整爲特定尺寸而不裁剪。 (Letterboxing)
- 10. 在wordpress中將圖像裁剪至一定尺寸
- 11. 用於將圖像裁剪成多個尺寸的導軌
- 12. 作爲屏幕尺寸裁剪UIiimage
- 13. php將縮略圖調整爲固定尺寸 - 無裁剪
- 14. 使用最小尺寸的CSS FlexBox裁剪內容
- 15. 如何從固定尺寸的圖庫裁剪圖像
- 16. 將圖像調整爲更小尺寸
- 17. 將標題縮小爲圖像尺寸
- 18. 使用ImageMagic裁剪圖像會產生尺寸錯誤的圖像 - 爲什麼?
- 19. imagemagick - 縮小尺寸/裁剪/一次保存爲jpeg?
- 20. 裁剪和調整圖像到具體尺寸
- 21. 縮放和裁剪圖像具有固定尺寸
- 22. 檢測屏幕高度和裁剪全尺寸圖像
- 23. 裁剪後的輸出圖像比原始尺寸大
- 24. CSS裁剪圖像到一定的尺寸
- 25. CSS中心可變尺寸的裁剪圖像
- 26. 大尺寸圖像內沒有裁剪或長寬比變化
- 27. 裁剪後的圖像尺寸越來越大
- 28. 裁剪圖像,但保留默認尺寸
- 29. 角度裁剪的圖像文件尺寸變大
- 30. 如何在指定尺寸內裁剪圖像
邊界區域大小是否爲靜態?如果是這樣,你可以嘗試使用ImageMagick python綁定。 – Qberticus 2009-12-15 06:03:38
空白邊框大小不是固定值,它每個圖像都不相同。 – jack 2009-12-15 06:06:27