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

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

新規登録して質問してみよう
ただいま回答率
85.48%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

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

配列

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

Q&A

解決済

2回答

1412閲覧

配列の最後まで行ったら折り返すようにしたいです。

Shooo-8897

総合スコア3

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

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

配列

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

0グッド

0クリップ

投稿2021/06/22 23:48

前提・実現したいこと

アニメーションでsrc10(配列の最後)まで行ったら折り返すといった感じにしたいです。画像を追加すればできるのですが可能であれば10枚で実現させたいです。よろしくお願い致します。

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

なし

該当のソースコード

python

1from PIL import Image 2 3src1 = Image.open('img1.png') 4src2 = Image.open('img2.png') 5src3 = Image.open('img3.png') 6src4 = Image.open('img4.png') 7src5 = Image.open('img5.png') 8src6 = Image.open('img6.png') 9src7 = Image.open('bom11.png') 10src8 = Image.open('bom12.png') 11src9 = Image.open('bom13.png') 12src10 = Image.open('bom14.png') 13 14src1 = src1.convert('RGB') 15src2 = src2.convert('RGB') 16src3 = src3.convert('RGB') 17src4 = src4.convert('RGB') 18src5 = src5.convert('RGB') 19src6 = src6.convert('RGB') 20src7 = src7.convert('RGB') 21src8 = src8.convert('RGB') 22src9 = src9.convert('RGB') 23src10 = src10.convert('RGB') 24 25src1.save( 26 'anime00.gif', 27 save_all = True, 28 append_images = [src2,src3,src4,src5,src6,src7,src8,src9,src10,src9,src8,src7,src6,src5,src4,src3,src2,], 29 duration = 500, 30 loop = 0 31 ) 32

試したこと

現在のコードで、折り返すというのは一応実現できています。ですが画像が多すぎて容量が大きいため、src10まで行ったら折り返すという一連の動きを無限ループできるようにしたいです。

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

PythonのPillowでできる範囲でお願い致します。もし不可能でしたらこのままにしますが、できるだけ容量を小さくしたいのでアドバイスいただけると幸いです。よろしくお願い致します。

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

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

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

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

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

TakaiY

2021/06/23 01:27

質問は何ですか? ・容量を減らしたい? ・無限ループするようにしたい? 無限ループの方はloop=0にしているからできてるはずですけどね
guest

回答2

0

ベストアンサー

Pilllowであれなんであれ、画像サイズや画質を変更せずにアニメーションGIFの容量をそれ以上減らすのは無理だと思います。

画質を落とすとすればRGBに変換した後、256階調よりも階調数を減らす処理を先にやっておけば多少は減ると思いますが元の画像次第ですね。

投稿2021/06/23 01:14

ppaul

総合スコア24666

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

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

Shooo-8897

2021/06/23 01:38

ご回答ありがとうございます。折り返しできるように現在のコードではsrc10の次にsrc9を追加していますが、appendで追加する画像数を変えたら容量が変わるため、src10までいったらsrc9を追加せずに折り返すといった処理をどうにかして実現したいと考えていました。このような処理をすることで容量を減らすことはできないのでしょうか。それとも、折り返し終わるまでが一連の動きになるため容量自体は変化しないのでしょうか。
ppaul

2021/06/23 03:24

アニメーションGIFのフォーマットの説明にはフレームの再利用ができると書いてあります。 一方、PILでのアニメーションGIFの保存時にはappend_imagesのインタフェースしか提供されていないので、同じ画像であっても別のフレームになるか、同じ画像なら自動的にフレームを再利用してくれるだろうということで、いずれにしても「減らすのは無理」と回答しました。 ご質問があったので簡単なデータで再利用されるかどうかを確認しましたが、フレームの再利用はされていませんでした。 従って、PythonのPIL以外のライブラリかPython以外の方法で作成すれば要領が減る可能性は理論的にはあります。 現実問題としては、そういう機能を持ったPythonのライブラリは聞いたことがありませんの、ほぼないと思います。 また、Python以外のツールでも現存するものであるかどうかは怪しいです。なぜならそういうことをしたい人たちはアニメーションGIFではなく、時間軸方向の圧縮ができる動画フォーマットを使うのが普通ですので、動画フォーマットできる前の昔のツールでGIFアニメのフレーム再利用をサポートしていたものも、需要がないのでメインテナンスされなくなっている可能性が高いからです。
Shooo-8897

2021/06/23 05:39

そうなんですね!丁寧で詳細なご回答ありがとうございます。助かりました。また機会がありましたらよろしくお願い致します。
guest

0

私ならsrc1, src2, src3...ではなく、リストを使います。

そうすれば、src[2] のようにアクセスできるので、for文とかでも使えます。

そして、余り(割り算の)を使えば実装できそうです。

投稿2021/06/23 00:16

編集2021/06/23 01:16
BeatStar

総合スコア4958

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

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

matobaa

2021/06/23 00:42

リストかどうかで容量に影響あるのかなー
Shooo-8897

2021/06/23 01:14

ご回答ありがとうございます。申し訳ないのですが、どこをどのようにすればよいのか見当がつかないため具体的なコードを教えていただけると助かります。参考とさせていただきたいため、お手数おかけしますがよろしくお願い致します。
Shooo-8897

2021/06/23 01:15

やはり容量を小さくすることは難しいということでしょうか?
BeatStar

2021/06/23 01:33

失礼。 >> src10まで行ったら折り返すという一連の動きを無限ループできるようにしたいです だけフォーカスしていました… 容量については無理だと思います。 ただ、もしかすると、C言語でいうzlibのようなものを使えば可能…かもしれない……
Shooo-8897

2021/06/23 05:41

わかりました。大丈夫です!早急にご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問