Python 將大頭照平鋪在 4x6 的相片圖檔

護照、身份證等證件申辦,常常都還是需要提供實體照片~

想要透過便利商店洗大頭照的照片,查起來超貴,但是 4*6 的照片相對便宜很多~

於是~ 來將大頭照合進 4x6 的照片,再去洗出來,在靠剪刀即可~

照片尺寸(英吋) 與 實際尺寸(厘米) (300dpi)

  • 10x15:25.4x38.1
  • 10x12:25.4x30.5
  • 8x10 :20.3x25.4
  • 6x8 :15.2x20.3
  • 5x8 :12.7x20.3
  • 5x7 :12.7x17.7
  • 4x6 :10.1x15.2
  • 3.5x5:8.9x12.7

Python 將大頭照平鋪在 4x6 的相片圖檔

  • 1吋照片的尺寸:
    • 2.5cm * 3.5cm
    • 295px * 413px
  • 2吋照片的尺寸:
    • 3.5cm * 5.3cm
    • 413px * 626px

其它常用照片尺寸:

  • 照片類型(英吋) 尺寸(厘米)
    • 身份證 (22mm x 32mm)
    • 駕駛證 (22mm x 32mm)
    • 黑白小一寸 (22mm x 32mm)
    • 彩色小一寸 (27mm x 38mm)
    • 彩色大一寸 (40mm x 55mm)
    • 普通證件照 (33mm x 48mm)

查到我以前做這件事情,是使用:軟體: PhotoCap 輕鬆製作大頭照

不過現在沒有 Windows 可以用,得要使用 GIMP 或者 靠程式直接生成~

發現靠程式才是最快的,直接把照片檔案進去,直接執行輸出就是成品~

資料準備

  • your-photo.png 大頭照照片檔案
  • passport_photos_4x6.jpg 輸出結果

程式(passport-2inch-to-4x6.py)

  1. #!/usr/bin/python3
  2. # 將 PNG 的照片縮成 2吋,再排入 4*6 的照片方便一次印出
  3. # pip install Pillow
  4. from PIL import Image
  5. # 載入大頭照
  6. original_image = Image.open("your-photo.png")
  7. # 設定解析度(300 DPI)與尺寸
  8. dpi = 300
  9. passport_width = int(2 * dpi) # 2 吋寬
  10. passport_height = int(2 * dpi) # 2 吋高
  11. passport_size = (passport_width, passport_height)
  12. passport_canvas = Image.new("RGB", passport_size, "white") # 2x2 吋的白底畫布
  13. # 保持原圖比例 縮放以塞入 2x2 吋畫布
  14. original_aspect = original_image.width / original_image.height
  15. target_aspect = passport_width / passport_height
  16. if original_aspect > target_aspect:
  17. # 原圖過寬,限制寬度
  18. new_width = passport_width
  19. new_height = int(passport_width / original_aspect)
  20. else:
  21. # 原圖過高,限制高度
  22. new_height = passport_height
  23. new_width = int(passport_height * original_aspect)
  24. resized_image = original_image.resize((new_width, new_height), Image.Resampling.LANCZOS) # 縮圖
  25. # 將縮圖貼在畫布中央( // = math.floor(取整數、商數) )
  26. offset_x = (passport_width - new_width) // 2
  27. offset_y = (passport_height - new_height) // 2
  28. passport_canvas.paste(resized_image, (offset_x, offset_y))
  29. # 建立一張 4x6 吋的白底畫布
  30. output_width = int(6 * dpi)
  31. output_height = int(4 * dpi)
  32. output_image = Image.new("RGB", (output_width, output_height), "white")
  33. # 計算可放置的行數與列數
  34. cols = output_width // passport_width
  35. rows = output_height // passport_height
  36. # 貼上多張 2x2 照片
  37. for row in range(rows):
  38. for col in range(cols):
  39. x = col * passport_width
  40. y = row * passport_height
  41. output_image.paste(passport_canvas, (x, y))
  42. # 儲存輸出圖片
  43. output_image.save("passport_photos_4x6.jpg", dpi=(300, 300))

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈Python 將大頭照平鋪在 4x6 的相片圖檔〉中有 2 則留言

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料