2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

jpgをpngに変換しても透明度がいじれなかったからなんとかした

Last updated at Posted at 2020-03-30

#はじめに
pythonでjpgをpngに変換しても透明度がいじれなかったので,力業で解決した話

#環境

  • Windows 10
  • VSCode
  • Python 3.7.3

#単純に変換してみる
「python convert jpg to png」とかでググるとPillowが出てくると思います.

公式を見ながら下記のようにインストール

pip install Pillow

ここを参考にサンプルを書くと

jpgToPNG.py
from PIL import Image

#絶対パスも可
img = Image.open('input.jpg')
img.save('output.png')

これで一応PNGができるが,透明度をいじるソースを書くとエラーをはく
ちなみに,ペイントを使って変換した画像はきちんと透明度をいじれる

#問題点
しばらく,うんうんうなりながらググっていたら

png画像とjpg画像の取り扱いの注意点

上記のサイトがヒット
なるほど,pngをjpgに変換してもRGBAのAが残る場合がある(解釈あってる?)ということなら,逆の場合もあるのかもしれない

というわけで,上記のサイトを参考にチェックするソースを作成

checkPNG.py
from PIL import Image

path_png1 = "output1.png" #透明度編集できないPNG
path_png2 = "output2.png" #ペイントで変換した,透明度編集できるPNG

image = np.asarray(Image.open(path_png1))
print(Image.open(path_png1))
print(image.shape)
image = np.asarray(Image.open(path_png2))
print(Image.open(path_png2))
print(image.shape)

結果
<PIL.PngImagePlugin.PngImageFile image mode=RGB size=1920x1080 at 0x1762DB300B8>
(1080, 1920, 3)
<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1920x1080 at 0x176252F92B0>
(1080, 1920, 4)

たしかに,編集できないPNGはRGB modeになってる.

#解決
原因が分かったので,解決していきます.

png画像とjpg画像の取り扱いの注意点によるとopen()のあとにconvert()を付けるとmodeを変更できるようです.

なので,以下のように実装

jpgToPNG.py
from PIL import Image

rgba_img = Image.open('input.jpg').convert('RGBA')
rgba_img.save('output.png')
print(rgba_img)
print(np.asarray(rgba_img).shape)
結果
<PIL.Image.Image image mode=RGBA size=1920x1080 at 0x1CF941EF9E8>
(1080, 1920, 4)

結果も問題ありませんし,無事透明度をいじることが出来ました.
以上です.

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?