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

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

新規登録して質問してみよう
ただいま回答率
85.35%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

1127閲覧

リストに追加するときの条件処理とその後の追加の仕方が分かりません

Shooo-8897

総合スコア3

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/06/24 16:16

前提・実現したいこと

点線より上の処理の処理をリストを用いてシンプルにしたいと考えています。
現在は、アルファブレンドを行う際の条件処理と、ブレンドしたものをどのようにリストに追加すればよいかで悩んでいます。何卒よろしくお願い致します。

発生している問題・エラーメッセージ

src3 = [] for i in src2: if i % 2 == 1: i.alpha_composite(i, i+1)#アルファブレンドを行う の部分で以下のエラーが生じています。 TypeError: unsupported operand type(s) for %: 'Image' and 'int'

該当のソースコード

python

1from PIL import Image 2 3src1 = Image.open('img7.png') 4src2 = Image.open('img34.png') 5src1 = src1.convert('RGBA')#アルファブレンドで合成したい画像はRGBA 6src2 = src2.convert('RGBA') 7src1 = Image.alpha_composite(src1, src2)#アルファブレンドを行う 8src1.save('bom11.png') 9 10src3 = Image.open('img8.png') 11src4 = Image.open('img33.png') 12src3 = src3.convert('RGBA') 13src4 = src4.convert('RGBA') 14src3 = Image.alpha_composite(src3, src4) 15src3.save('bom12.png') 16 17src5 = Image.open('img9.png') 18src6 = Image.open('img32.png') 19src5 = src5.convert('RGBA') 20src6 = src6.convert('RGBA') 21src5 = Image.alpha_composite(src5, src6) 22src5.save('bom13.png') 23 24src7 = Image.open('img10.png') 25src8 = Image.open('img31.png') 26src7 = src7.convert('RGBA') 27src8 = src8.convert('RGBA') 28src7 = Image.alpha_composite(src7, src8) 29src7.save('bom14.png') 30------------------------------------------------------------------------------------ 31from PIL import Image 32 33files = ['img7.png','img34.png','img8.png','img33.png','img9.png','img32.png','img10.png', 'img31.png'] 34 35src = [] 36for i in files: 37 src.append(Image.open(i)) 38 39src2 = [] 40for i in src: 41 src2.append(i.convert('RGBA')) 42 43src3 = [] 44for i in src2: 45 if i % 2 == 0: 46 i.alpha_composite(i, i+1)#アルファブレンドを行う 47 48src3[0].save('bom11.png') 49src3[1].save('bom12.png') 50src3[2].save('bom13.png') 51src3[3].save('bom14.png')

試したこと

[0]と[1]、[2]と[3]といったような組み合わせでブレンドを行いたいため、条件処理で偶数番目の時だけ次の画像とブレンドをするようにしてみたのですが上手くいきませんでした。
点線より上の処理を含め、現在エラーの生じている部分と最後の保存以外は実行できることを確認済みです。保存は、リストへの追加ができれば上手くいくかと思います。

補足情報(FW/ツールのバージョンなど)

PythonのPillowを使って製作するように指示が出ています。

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

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

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

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

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

guest

回答3

0

ああ、、

src3.append(Image.alpha_composite(i, i+1))
ここが、
src3.append(Image.alpha_composite(src2[i], src2[i+1]))
だと思います。

投稿直後に気付いて修正したつもりでしたが、できていませんでした。
すみません。

投稿2021/06/25 00:52

udon-ken

総合スコア657

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

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

Shooo-8897

2021/06/25 01:24

ありがとうございます。大丈夫です! 再度こちらでも試したところ、エラーなく処理できました。修正して教えていただき本当にありがとうございます。勉強になりました!
guest

0

ベストアンサー

複雑な方法でやって苦労するよりも、簡単な方法でやった方が後で読んだときにわかりやすくなります。

以下のように書き換えてみた方が良いでしょう。(動かしてはいませんがだいたいこうです)

python

1def merge_save(infile1, infile2, outfile): 2 image1 = Image.open(infile1).convert('RGBA') 3 image2 = Image.open(infile2).convert('RGBA') 4 outimage = Image.alpha_composite(image1, image2) 5 outimage.save(outfile) 6 7infiles1 = ['img7.png', 'img8.png', 'img9.png',' img10.png'] 8 9infiles2 = ['img34.png','img33.png','img32.png','img31.png'] 10 11outfiles = ['bom11.png','bom12.png','bom13.png','bom14.png'] 12 13for i in range(len(infiles1)): 14 merge_save(infiles1[i], infiles2[i], outfiles[i])

投稿2021/06/24 23:27

ppaul

総合スコア24670

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

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

Shooo-8897

2021/06/24 23:51

ご回答ありがとうございます。感動しました!ご提示いただいたように書くことですごくシンプルになるのですね!早速やってみたところ上手くいきました。このようなものは考えもしなかったのですごく勉強になりました。確かに分かりやすいです。本当に助かりました。ありがとうございます!!
guest

0

リストsrc2の要素はImageオブジェクトなので割り算できませんよね。
以下のように書けばいいのではないかと思います(未検証なので正確ではないかもしれませんが、ループの定義はこういう感じということで)。

python

1for i in range(len(src2)): 2 if i % 2 == 0: 3 src3.append(Image.alpha_composite(i, i+1))

投稿2021/06/24 20:50

udon-ken

総合スコア657

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

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

Shooo-8897

2021/06/24 23:17

ご回答ありがとうございます。ご指摘いただいた点、すごく納得できました。 そこで早速やってみたのですが、再度エラーが発生し以下のように表示されました。 AttributeError: 'int' object has no attribute 'load' こちらの原因はどこにあるのでしょうか。お手数ですが、教えていただけると幸いです。よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問