Symfoware

Symfowareについての考察blog

Python3 別途ライブラリをインストールせず、ImageMagickを使用するpymraw

Python3から直接ImageMagickのコマンドを実行する方法を調べてみました。
Python3 subprocess + ImageMagick identifyで画像のexif情報を取得する
Python3 subprocess + ImageMagick convertで画像のリサイズやトリミングを実行
Python3 subprocess + ImageMagick convert プログラム中のバイナリデータを変換

材料が揃ったので、ソースをまとめてクラス化しました。
https://bitbucket.org/symfo/pymraw

ImageMagickがインストールされていることと、Python 3.5以上であることが条件です。
機能は少ないですが、ウリは...

・1ファイル置くだけで使える
・テンポラリファイルを作成しない

AWS LambdaのPythonでサムネールを作りたかったので、こういうのが欲しかった。



インストール



https://bitbucket.org/symfo/pymraw
ここからpymraw.pyをダウンロードして、ソースファイルと同じ階層においておきます。



サンプル



画像のサイズやexif情報を取得し、リサイズを行うサンプル。


  1. # -*- coding:utf-8 -*-
  2. import os
  3. import pymraw
  4. base_dir = os.path.abspath(os.path.dirname(__file__))
  5. with open(os.path.join(base_dir, 'cc2.jpg'), 'rb') as f:
  6.     img = f.read()
  7. # バイナリデータを指定してインスタンス生成
  8. m = pymraw.Imagick(img)
  9. # 各種情報を表示
  10. print(m.width())
  11. print(m.height())
  12. print(m.exif('DateTimeOriginal'))
  13. # リサイズ実行 stripは自動で行われる
  14. r = m.resize(300, 300)
  15. # バイナリデータを取得してファイルを保存
  16. with open('test.jpg', 'wb') as o:
  17.     o.write(r.get_blob())




resize(width, height, is_strip, quality)
width:幅
height:高さ
is_strip:stripするか(deafult:True)
quality:変換後のクオリティー(1-100 default:100)



という感じです。





回転と切り抜き



回転や切り抜きはこんな感じになります。


  1. # -*- coding:utf-8 -*-
  2. import os
  3. import pymraw
  4. base_dir = os.path.abspath(os.path.dirname(__file__))
  5. with open(os.path.join(base_dir, 'cc2.jpg'), 'rb') as f:
  6.     img = f.read()
  7. # バイナリデータを指定してインスタンス生成
  8. m = pymraw.Imagick(img)
  9. # 回転
  10. r = m.rotate(90)
  11. # バイナリデータを取得してファイルを保存
  12. with open('test-1.jpg', 'wb') as o:
  13.     o.write(r.get_blob())
  14. # 切り抜き
  15. c = m.crop(500, 500, 10, 20)
  16. with open('test-2.jpg', 'wb') as o:
  17.     o.write(c.get_blob())



回転

rotate( degrees )
degrees : 画像を回転させる角度(時計回り)




切り抜き


crop ( width , height , x , y )
width:抽出する幅
height:抽出する高さ
x:抽出する領域の左上の X 座標
y:抽出する領域の左上の Y 座標






透かし画像挿入



compositeで透かし画像を入れます。
スタイルはtile固定です。


  1. # -*- coding:utf-8 -*-
  2. import os
  3. import pymraw
  4. base_dir = os.path.abspath(os.path.dirname(__file__))
  5. with open(os.path.join(base_dir, 'cc2.jpg'), 'rb') as f:
  6.     img = f.read()
  7. # バイナリデータを指定してインスタンス生成
  8. m = pymraw.Imagick(img)
  9. # 透かし画像を入れる
  10. r = m.composite(os.path.join(base_dir, 'lace_round_5.png'))
  11. # バイナリデータを取得してファイルを保存
  12. with open('test-3.jpg', 'wb') as o:
  13.     o.write(r.get_blob())





composite(water_mark_fike)
water_mark_fike:透かし画像のパス




AWS Lambdaで使えるか試してみます。

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2017/08/12(土) 14:00:25|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Android http経由でのデータ取得とJSONデータの解析 | ホーム | Python3 subprocess + ImageMagick convert プログラム中のバイナリデータを変換>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/2022-40f7bf49
この記事にトラックバックする(FC2ブログユーザー)