• 締切済み
  • すぐに回答を!

python PIL のインデックスモードでの保存

python の画像処理ライブラリ PIL にてインデックスモードの画像を読み込んだときの処理について 質問があります。 下記のコードのように png (インデックスモード) の画像を読み込んでピクセルの値を変えて 再びインデックスモードで保存しようと試みました。 しかし、出力された画像には色がついておらず、白黒の画像になっていました。 色の情報が抜けてしまったのですがどこが間違っているかわかりません。 どなたか分かるかたはいらっしゃらないでしょうか。 ご回答いただけたら幸いです。 よろしくお願いします。 from PIL import Image import numpy as np import sys origin = (0,1,4,4,5) to = (0,1,4,4,5) for ID in open(sys.argv[1]): ID = ID.strip() im=Image.open(ID+'.png') print im.info imnp=np.array(im) for (i, j) in zip(origin,to): imnp[imnp==i] = j pil_img = Image.fromarray(np.uint8(imnp),mode="P") pil_img.save(ID+'_con.png','bmp')

共感・応援の気持ちを伝えよう!

みんなの回答

  • 回答No.1

インデックスカラーで保存する際にパレットの指定が必要になります。 元画像のパレットを流用するのでしたら、保存前に pil_img.putpalette(im.getpalette()) を追加すれば良いと思います。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 画像回転アニメ

    Pythonで読み込んだ画像を360度回転するgifアニメにしたく見よう見まねで下記コードを書きました。 走り出してしばらくすると” list index out of range”などのエラーが出ます。どうしたらエラーをなくせるでしょうか?ご教示のほどよろしくお願いします。なお、Colaboratoryを使用しています。 import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation from matplotlib.animation import PillowWriter from PIL import Image fig = plt.figure(figsize=(8,6),dpi=100) fig,ax=plt.subplots(1,1) ax.set_aspect('equal') rotor=Image.open('/rotor.png') ims = [] for i in range(360): im=rotor.rotate(angle=i,resample=Image.BICUBIC,expand=False) ims.append(im) anim = animation.ArtistAnimation(fig,ims) anim.save('ani.gif',writer="pillow",fps=10)

  • ImageMagickのみでRGB->インデックス画像を作る方法は?

    ImageMagick 6.4.0 をLinux(fedora10)で使用しています。 「ImageMagickツールのみを使用」して、 「ファイル拡張子を変えずに」RGBモードの画像(例:png)をインデックスモードに変更する方法を実現しているかたが居ましたら、 その方法を教えていただきたいと思います。 たとえば以下の例は、何れも簡単に RGBモード -> インデックスモードになりますが、 上記の前提条件から外れています。 ファイル拡張子を変えている例 convert rgb_img.png index_img.png8 他のツールとしてGIMPを使っている例 rgb_img.png をGIMPで開いて「画像」->「モード」->「インデックス」にしてファイル保存(index_img.png)する。 ---------- ImageMagickのコマンドやパラメータだけで処理したいので、ご教授のほどよろしくお願いします。 「ImageMagickでは不可能」という結果でも構いません。 なお、-channel や -alpha なども試しましたが、ImageMagickでは出力するファイル拡張子によってデフォルトのモードが設定されてしまう気がしています。(たとえば png ならRGBモードになってしまう) http://www.imagemagick.org/script/command-line-options.php

  • Pythonで画像の読み込みが上手くいきません。

    こんばんは、Pythonの画像の扱い方について質問させて頂きます。 画像の読み込みでエラーが発生して困っています、先にソースコードは・・・ #!/usr/bin/env python background_image_filename = 'sushiplate.jpg' mouse_image_filename = 'fugu.png' import pygame from pygame.locals import * #@UnusedWildImport from sys import exit pygame.init() screen = pygame.display.set_mode((640,480),0,32) pygame.display.set_caption("Hello,Worlds!") background = pygame.image.load(background_image_filename).convert() mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha() while True: for event in pygame.event.get(): if event.type == QUIT: exit() screen.blit(background,(0,0)) x,y = pygame.mouse.get_pos() x-= mouse_cursor.get_width() / 2 y-= mouse_cursor.get_height() / 2 screen.blit(mouse_cursor,(x,y)) pygame.display.update() です。 表示されるエラーは Traceback (most recent call last): File "C:\Users\○○○-Note\Documents\Python\Pygame\src\helloworld.py", line 16, in <module> background = pygame.image.load(background_image_filename).convert() pygame.error: Couldn't open sushiplate.jpg 実行結果は、黒い画面が一瞬表示され、勝手に消えるといったものです。 画像の読み込みが上手くできていないのが原因だと思うのですが・・・、画像ファイルの置き場所がおかしいのでしょうか? 参考書には置く場所などは書いていなかったので、ダウンロードしたフォルダと、 C:\Users\○○○-Note\Documents\Python\Pygame\に置いてあります。                            (Pygameはプロジェクト名です) 開発環境は、EclipseにPydevを入れ、Pythonのver3.2を使って開発しています、OSはWindows7 64bitです。 お時間があるときにでも、画像ファイルの正しい扱い方、エラーの原因を教えて頂けると助かります、よろしくおねがいします。

  • macのPCでpythonでのnumpyエラー

    ラズパイでpythonで作成しているTCP通信のクライアントソフトのプログラミング作業をMacのPC側で行いたいと思っています。それで、tcp_client1_02.pyというファイルをmac側に移して、Python IDLEで開いてRUNしてみたところ、次のようなエラーが出てきました。 >>> =========== RESTART: /Users/****/Desktop/tcp_client1_02.py =========== Traceback (most recent call last): File "/Users/****Desktop/tcp_client1_02.py", line 4, in <module> import numpy as np ImportError: No module named 'numpy' >>> どうも、このプログラム内の配列で使用しているnumpyのモジュールがPCに入っていないようなのですが、インストール方法など解決方法をご教示いただきますよう宜しくお願い致します。

  • z-indexについて...

    今回添付画像のように画像の上にアイコンを置きたかったのですがうまくいきません。 http://snapkidz.biz/wp/ cssのz-indexを使って熊のアイコンをpngで表示させればうまくいくのかな?と思ったのですが、うまく表示できませんでした。 ソースです。 <div id="header"> <ul class="haeder_bak"> <li><img src="http://snapkidz.biz/wp/wp-content/uploads/2011/12/blk_03.jpg" /> <li><img src="http://snapkidz.biz/wp/wp-content/uploads/2011/12/blk_04.jpg" /></li> <li><img src="http://snapkidz.biz/wp/wp-content/uploads/2011/12/blk_05.jpg" /></li> <li><img src="http://snapkidz.biz/wp/wp-content/uploads/2011/12/blk_06.jpg" /></li> <li><img src="http://snapkidz.biz/wp/wp-content/uploads/2011/12/blk_07.jpg" /></li> </ul> <div class="header_slider"> <img src="http://snapkidz.biz/wp/wp-content/uploads/2011/12/blk_09.jpg" /> </div> <div class="header_bear"> <img src="http://snapkidz.biz/wp/wp-content/uploads/2011/12/blk_03.png" /> </div> </div> CSSです。 #header{ width:100%; margin-top:15px; position :relative; z-index:0; } #header li{ float:left; } #header ul{ list-style-type:none; } .haeder_bak{ poaition:abosolute; z-index:10; } .header_slider{ poaition:abosolute; z-index:20; } .header_bear{ poaition:abosolute; z-index:30; } どうすれば添付画像のようにいきますか?

    • ベストアンサー
    • CSS
  • PHPで画像縮小

    質問します。自分は今PHPで画像の縮小をしようと思っています。 しかしうまくいきません。 コードは <htm> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>画像縮小</title> </head> <body> <?php $size = getimagesize("dl_button.png"); $image_in = imagecreatefrompng("dl_button.png"); $image_out = imagecreate( 90, 90 ); imagecopyresized( $image_out, $image_in, 0, 0, 0, 0, 90, 90, $size[ 0 ], $size[ 1 ] ); imagepng($image_out,"small.png"); imagedestroy( $image_in ); imagedestroy( $image_out ); ?> <img src = "dl_button.png" border = "0"> <img src = "small.png" border = "0"> </body> </html> となっています。 今のままだとエラーが出て、 「small.pngが見あたらない」と言われてしまいます。 ディレクトリは index.phpとdl_button.pngが同じ場所にあります。

    • ベストアンサー
    • PHP
  • 交互に入れ替わる画像を複数配置

    画像名が変わっても、プログラムは変更しないで、html内のソースの画像名のみを変更するだけでいいようなjavascriptを探していたところ、下記のサイトを発見しました ◆画像を交互に入れ替える (title属性を利用して入れ替える) http://www.openspc2.org/reibun/javascript2/image/change/0002/index.html やりたいことは上記のものでいいのですが、1ページ内に、交互に入れ替わる画像を複数配置する場合は、どのようにしたらいいでしょうか? 上記のものですと、「photo01」をidに指定した画像1つしか動作しません。 最初にも申しました通り、プログラムは変更したくないので、できれば、1つのIDで画像名を変更するだけにしたいのですが・・・ 以下のように記述して、画像名を修正するだけでいいようにしたいですが可能でしょうか? <img src="images/new.png" width="10" height="10" alt="" id="photo01" title="images/icon01.png"> <img src="images/new.png" width="10" height="10" alt="" id="photo01" title="images/icon02.png"> <img src="images/new.png" width="10" height="10" alt="" id="photo01" title="images/icon03.png"> よろしくお願い致します

  • python初心者です。csvファイルを扱いたいんですが...

    すいません、python初心者ですので、気長に聞いてくださいcsvファイルの10番目のカラムの人数を合計したんです。1行目のフィールドはカラム名なので飛ばして2行目から読み込みたいんですが、結果が出てきません。一応書いたプログラムは、 #!usr/bin/env python import sys import string i = 0 for line in open('./data.csv').readlines(): item = string.split(line,',') if item[9].isdigit(): i+=int(item[9]) print i です。処理速度を早くしたいのでdictionaly化せずに行いたいんですが、誰かご教授願えませんか?

  • 画像 重ねる

    htmlソース <div id="title"> <a href="index.html"><img src="img/logo.png"></a> </div> cssソース #title{ background-image: url(img.jpg); } cssソースに記述してある画像が、htmlソースのリンク付き画像の背景に表示されません。 対処方法をご教示いただけないでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • CSS
  • 画像の回転

    Javaで画像の回転を180度時計回りに回転させたいのですが どのようにしたら良いのでしょうか? Image img = new Image; img = getImage(getDocumentBase(), "images/test.png"); g.drawImage( img, x, y, this); あとimportも何を書けばよいのかもわかりません。 グラフィックスについて詳しく書かれている本も知りたいです。

    • ベストアンサー
    • Java