質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

2回答

3092閲覧

透過PNGを重ねるとエラーになるのは?

Casablanca_mtg

総合スコア209

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2017/02/23 05:02

編集2017/02/27 01:27

お世話になります
Win10を使っています
Anaconda2で下記のようなエラーが返ります

from PIL import Image
import Image
background =Image.open('C:/Imaging-1.1.7/Images/lena.jpg')
surface = Image.open('C:/Imaging-1.1.7/Images/himawari.png')→適当な透過PNG画像を用意する
surface = surface.resize((128, 128))
surface_mask = surface.split()[3]→splitメソッドで(R,G,B,A)のチャンネルを個別に抽出できる。
background.paste(surface, (0, 0, 128, 128), mask=surface_mask)

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\mtg-1\Anaconda2\lib\site-packages\PIL\Image.py", line 1102, in paste
mask.load()
AttributeError: 'tuple' object has no attribute 'load'

surface_mask = surface.split()[3]??

このあたりが理解できないです
よろしくお願いいたします
ちなみにPng画像は向日葵です。
splitメソッドで(R,G,bG,A)のチャンネルを個別に抽出できると記載があります。やり方がわからないですし、透過PNGのアルファ・チャンネルをマスク画像として張り付けるには貼り付けたい画像からsplitメソッドを用いてその取り出した画像をPastメソッドのmask引数に指定する。との説明があります。このエラーの意味は?AttributeError: 'tuple' object has no attribute 'load'このあたりのことが理解できていません。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikedas

2017/02/24 09:48

「surface_mask = surface.split()」のところは、何をしようとしているのでしょうか。説明していただけませんか。
Casablanca_mtg

2017/02/25 00:02

ありがとうございます。splitメソッドで(R,G,bG,A)のチャンネルを個別に抽出できると記載があります。やり方がわからないですし、透過PNGのアルファ・チャンネルをマスク画像として張り付けるには貼り付けたい画像からsplitメソッドを用いてその取り出した画像をPastメソッドのmask引数に指定する。との説明があります。このエラーの意味は?AttributeError: 'tuple' object has no attribute 'load'このあたりのことが理解できていません。よろしくお願いいたします。
ikedas

2017/02/26 05:57

「説明があります」とのことですが、どこにあるのでしょうか。URLや書名を明記して下さいませんか。
Casablanca_mtg

2017/02/26 06:46

お世話になります。今勉強している書籍はPython入門【2&3対応】で学習中です。P347の”透過PNGを重ねる”部分です。スクリプトでSplitを使った場合に置きます
ikedas

2017/02/26 12:11 編集

書籍に書いてあることであれば、正確に引用して下さい。まず書籍に載っているコードを改変せずに書いてもらわないと、質問を見た人は書籍が間違っているのか、改変されたコードが間違っているのかわかりません。それと、引用するときは必ず出所 (書名やページ数) を書いて下さい (なお、コメント欄ではなく、質問の方に書いてくださいね)。引用自体は自由にやって構わないのですが、他人の書いたものをそう断らずに写したり、書き換えた箇所があるのにそれを明示しなかったりするのは、引用の要件を満たさないのでだめです。簡単に言うと、「他人が言ったり書いたりしたこと」と「自分の考えたこと、聞きたいこと」は区別して書いて下さい。
ikedas

2017/02/26 12:18

それと、書籍にはサンプルコードだけではなく説明があったはずです。それも引用してもらったほうがいいです。質問を見た人は、質問者さんがどんな説明を読んだのか知らないのですから、「理解できません」と言われてもどのへんから理解できないのかよく分かりません。簡単に言うと「自分が分かっていること」を示した上で「自分がわからないこと」を書いて下さい。
Casablanca_mtg

2017/02/27 01:59

ikedas様いろいろありがとうございました。質問の説明に関しましては今後質問欄で書かせていただくようにいたします。重ねてお礼申し上げます
guest

回答2

0

ベストアンサー

生成した画像を示して戴きましたが、提示されたコードを見る限り、本来はlena.jpg (帽子をかぶった女性のアップショット) にhimawari.png (ひまわりの画像) が重なったものができるのではないかと思います。コードのどこかを変更されたのではないですか (元のコードとの違いを明記していただけないので、想像ですが)。


さて、『Python入門 [2&3対応]』の内容は、第15章まではPythonというプログラミング言語の基本的な説明で、それ以降は個別のライブラリの解説になっているようです。つまり、第16章以降は、実際にご自分でプログラムを作ったり読んだりするときに、必要な章だけ見ればいいです。

また、個々のライブラリの説明は本書の一章に全ておさまるような簡単なものではありません。本書では概略を説明しているだけです。詳しいことを知りたければライブラリの公式ドキュメントを探して読んで下さい。以下、PILを例にして説明します。

PILについて

同書「20-1 画像の作成」の冒頭でPILライブラリのウェブサイトのURLなどが紹介されているのではないかと思います。ここからたどると、ドキュメントは次の場所にあります。

これを見ると、PILにはImageというモジュールとImageDrawというモジュールが含まれるそうです。Imageモジュールにはsplitresizepasteといったメソッドがあるそうです。ドキュメントからこういったことがわかれば、第15章までで学んだことを応用して、このモジュールを使ってプログラムを書いたり、このモジュールを使って書かれたプログラムを読んだりすることができますよね。

画像データについて

もしも、「画像データにR、G、B (またはR、G、B、A) といったチャンネルが含まれている」といったことが理解できないのであれば、それは画像データのしくみの話ですので、プログラミングの解説をしている本などでいくら調べても、わかりません (たとえば上のPIL Handbookも、読む人にはそういったことは分かっているという前提で書かれています)。

ですので、「画像データの形式」についての書籍やウェブサイトの解説を探して、調べて下さい。

投稿2017/02/27 04:11

ikedas

総合スコア4335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Casablanca_mtg

2017/02/27 05:11

ありがとうございました。少しづつですが前に進めそうです。感謝申し上げます
guest

0

お世話になります。コードの打ち間違いがあったかもしれません。何度もトライしましたらできました。ただsplitメソッドで(R,G,B,A)のチャンネルを個別に抽出できるという部分は理解できていません
生成した画像はイメージ説明です。

投稿2017/02/27 01:56

Casablanca_mtg

総合スコア209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問