[ todo ] pillow enhancer version 11
:追加された部分
:削除された部分
(差分が大きい場合、文字単位では表示しません)
[ todo ] pillow enhancer
@[TOC](項目)
# グラデ関係
マスク画像が変更されたらgradeクラスからメッセージをもらう
本体でマスクがオンなら描画する
まず画像を変換してself.maskにpilのimageをセットする
1. 基本はこれだけど出来るかな?
左からのメッセージの受け関数をとりあえず作って
```
import io
from PyQt5.QtCore QBuffer , QIODevice
def test():
buffer = QBuffer()
buffer.open(QIODevice.WriteOnly)
Qimage.save( buffer ,'BMP' )
self.mask = Image.open( io.BytesIO( buffer ) ) # ここがうまくいくか??
# ** buffer.data() buffer.buffer() buffer.read()
# https://www.riverbankcomputing.com/static/Docs/PyQt5/api/qtcore/qbuffer.html#
self.mask.show()
```
- 問題はQt、Python、pillowの互換性
Qtからのメモリ書き出しはQIODeviceに対してだがpythonのオブジェクトに直接書き込めないのかな
```
buffer = bytearray()
Qimage.save( buffer ,'BMP' )
```
あるいは
buffer = bytearray()
buffer_io = io.BytesIO()
Qimage.save( buffer_io ,'BMP' )
```
こんなのじゃダメかな??
2.
def qimage_to_pilimage(qimage):
buffer = QBuffer()
buffer.open(QIODevice.WriteOnly)
qimage.save(buffer, "BMP")
fp = cStringIO.StringIO()
fp.write(buffer.data())
buffer.close()
fp.seek(0)
return PIL.Image.open(fp)
3.
https://teratail.com/questions/71426
url = "https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Wrightflyer.jpg/800px-Wrightflyer.jpg"
img_read = urllib.request.urlopen(url).read()
img_bin = io.BytesIO(img_read)
pil_img = Image.open(img_bin) # PILで開く
# PILでごにょごにょする
# PNGでエンコード
modified_bin = io.BytesIO()
pil_img.save(modified_bin, format='PNG')
4. pillow 自分でグラデを書く
https://codeday.me/jp/qa/20190309/385657.html
5. numpy で書く
https://note.nkmk.me/python-numpy-generate-gradation-image/
https://showa-yojyo.github.io/notebook/python-pillow.html#id21
----
- 円とグラデの中心をドラッグ対応にするか?
- 線形グラデ対応
- PyQtでお手軽GUI開発♪―――は可能だったか? 第4回 画面描画編
http://www7a.biglobe.ne.jp/~thor/novel/column/07.html
```
def paintEvent(self, event):
canvas = Qg.QPainter(self) #画面のPainterを取得する
#線形グラデーション
grad = Qg.QLinearGradient(25,0,75,100) #座標(25,0)~(75,100)間で定義
grad.setColorAt(0.1, Qg.QColor(Qt.red)) #色の位置の設定
grad.setColorAt(0.5, Qg.QColor(Qt.green))
grad.setColorAt(1.0, Qg.QColor(Qt.blue))
canvas.setBrush(Qg.QBrush(grad)) #画面に描画する
canvas.drawRect(0,0,100,100)
#放射状グラデーション
grad = Qg.QRadialGradient(150,50,50,160,60) #(150,50)を中心、半径50、(160,60)が開始位置
grad.setColorAt(0.0, Qg.QColor(Qt.white)) #色を指定
grad.setColorAt(1.0, Qg.QColor(Qt.blue))
canvas.setBrush(Qg.QBrush(grad)) #画面への描画
canvas.drawRect(100,0,100,100)
#円錐形グラデーション
grad = Qg.QConicalGradient(250, 50, 45) #座標(250,50)を中心に45度角から開始
grad.setColorAt(0.0, Qg.QColor(Qt.red)) #色の指定
grad.setColorAt(0.33, Qg.QColor(Qt.green))
grad.setColorAt(0.66, Qg.QColor(Qt.blue))
grad.setColorAt(1.0, Qg.QColor(Qt.red))
canvas.setBrush(Qg.QBrush(grad)) #画面への描画
canvas.drawRect(200,0,100,100)
```
----------------
# enhancer usage
```
def init
self.list = [
[ self.ui.label_* , ImageEnhance.Brightness ] ,
[ self.ui.label_* , ImageEnhance.Contrast ] ,
[ self.ui.label_* , ImageEnhance.Color ] , # 彩度
[ self.ui.label_* , ImageEnhance.Sharpness ] ,
]
def *****(self,v):
for l in self.list:
if l[0] is self.sender() :
******
break
```
# PIL.Image と PyQt4.QtGui.QImageの相互変換
グラデ画像は逆変換になるな
http://doloopwhile.hatenablog.com/entry/20100305/1267782841
-------
# 画質の調整
- 透明度アルファ付きのRGBに変換
con4 = image1.convert('RGBA')
- 彩度
from PIL import ImageEnhance #ImageEnhanceのインポート
con5 = ImageEnhance.Color(image1)
con5_image = con5.enhance(0.4) # 1が基本
<con5_image>
- コントラストを調整
con7 = ImageEnhance.Contrast(image1)
con7_image = con7.enhance(0.5) # 1が基本
<con7_image>
- 明度
con9 = ImageEnhance.Brightness(image1)
con9_image = con9.enhance(0.5) # 1が基本
con9_image
- シャープネス
con11 = ImageEnhance.Sharpness(image1)
con11_image = con11.enhance(0.5)
con11_image
----
# pillowについて調べた
- 公式
https://pillow.readthedocs.io/en/5.2.x/index.html
- エフェクトはここがわかりやすいね
Qtへの変換も
https://qiita.com/pashango2/items/145d858eff3c505c100a
- タグ取得はここ
https://qiita.com/Gen6/items/88c69ab3a0666895e7a8
- pil はQt変換を標準でサポートしてるのか??
https://dungeonneko.hatenablog.com/entry/2015/07/19/142034
Qpixmapに直接読み込むのとどっちが速いか試してみよう
- 画像貼り付け
Python, Pillowで画像に別の画像を貼り付けるpaste
https://note.nkmk.me/python-pillow-paste/
位置指定して小さい画像を貼り付けできる
----
→ [目次に戻る](https://mimemo.io/m/QORbW4qkvOoda0N)
項目グラデ関係
グラデ関係
マスク画像が変更されたらgradeクラスからメッセージをもらう
本体でマスクがオンなら描画する
まず画像を変換してself.maskにpilのimageをセットする
- 基本はこれだけど出来るかな?
左からのメッセージの受け関数をとりあえず作って
import io
from PyQt5.QtCore QBuffer , QIODevice
def test():
buffer = QBuffer()
buffer.open(QIODevice.WriteOnly)
Qimage.save( buffer ,'BMP' )
self.mask = Image.open( io.BytesIO( buffer ) ) # ここがうまくいくか??
# ** buffer.data() buffer.buffer() buffer.read()
# https://www.riverbankcomputing.com/static/Docs/PyQt5/api/qtcore/qbuffer.html#
self.mask.show()
- 問題はQt、Python、pillowの互換性
Qtからのメモリ書き出しはQIODeviceに対してだがpythonのオブジェクトに直接書き込めないのかな
buffer = bytearray()
Qimage.save( buffer ,'BMP' )
あるいは
buffer = bytearray()
buffer_io = io.BytesIO()
Qimage.save( buffer_io ,'BMP' )
こんなのじゃダメかな??
2.
def qimage_to_pilimage(qimage):
buffer = QBuffer()
buffer.open(QIODevice.WriteOnly)
qimage.save(buffer, "BMP")
fp = cStringIO.StringIO()
fp.write(buffer.data())
buffer.close()
fp.seek(0)
return PIL.Image.open(fp)
3.
https://teratail.com/questions/71426
url = "https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Wrightflyer.jpg/800px-Wrightflyer.jpg"
img_read = urllib.request.urlopen(url).read()
img_bin = io.BytesIO(img_read)
pil_img = Image.open(img_bin) # PILで開く
# PILでごにょごにょする
# PNGでエンコード
modified_bin = io.BytesIO()
pil_img.save(modified_bin, format='PNG')
4. pillow 自分でグラデを書く
https://codeday.me/jp/qa/20190309/385657.html
5. numpy で書く
https://note.nkmk.me/python-numpy-generate-gradation-image/
https://showa-yojyo.github.io/notebook/python-pillow.html#id21
----
- 円とグラデの中心をドラッグ対応にするか?
- 線形グラデ対応
- PyQtでお手軽GUI開発♪―――は可能だったか? 第4回 画面描画編
http://www7a.biglobe.ne.jp/~thor/novel/column/07.html
def paintEvent(self, event):
canvas = Qg.QPainter(self) #画面のPainterを取得する
#線形グラデーション
grad = Qg.QLinearGradient(25,0,75,100) #座標(25,0)~(75,100)間で定義
grad.setColorAt(0.1, Qg.QColor(Qt.red)) #色の位置の設定
grad.setColorAt(0.5, Qg.QColor(Qt.green))
grad.setColorAt(1.0, Qg.QColor(Qt.blue))
canvas.setBrush(Qg.QBrush(grad)) #画面に描画する
canvas.drawRect(0,0,100,100)
#放射状グラデーション
grad = Qg.QRadialGradient(150,50,50,160,60) #(150,50)を中心、半径50、(160,60)が開始位置
grad.setColorAt(0.0, Qg.QColor(Qt.white)) #色を指定
grad.setColorAt(1.0, Qg.QColor(Qt.blue))
canvas.setBrush(Qg.QBrush(grad)) #画面への描画
canvas.drawRect(100,0,100,100)
#円錐形グラデーション
grad = Qg.QConicalGradient(250, 50, 45) #座標(250,50)を中心に45度角から開始
grad.setColorAt(0.0, Qg.QColor(Qt.red)) #色の指定
grad.setColorAt(0.33, Qg.QColor(Qt.green))
grad.setColorAt(0.66, Qg.QColor(Qt.blue))
grad.setColorAt(1.0, Qg.QColor(Qt.red))
canvas.setBrush(Qg.QBrush(grad)) #画面への描画
canvas.drawRect(200,0,100,100)
----------------
# enhancer usage
def init
self.list = [
[ self.ui.label_* , ImageEnhance.Brightness ] ,
[ self.ui.label_* , ImageEnhance.Contrast ] ,
[ self.ui.label_* , ImageEnhance.Color ] , # 彩度
[ self.ui.label_* , ImageEnhance.Sharpness ] ,
]
def *****(self,v):
for l in self.list:
if l[0] is self.sender() :
break
# PIL.Image と PyQt4.QtGui.QImageの相互変換
グラデ画像は逆変換になるな
http://doloopwhile.hatenablog.com/entry/20100305/1267782841
-------
# 画質の調整
- 透明度アルファ付きのRGBに変換
con4 = image1.convert('RGBA')
- 彩度
from PIL import ImageEnhance #ImageEnhanceのインポート
con5 = ImageEnhance.Color(image1)
con5_image = con5.enhance(0.4) # 1が基本
<con5_image>
- コントラストを調整
con7 = ImageEnhance.Contrast(image1)
con7_image = con7.enhance(0.5) # 1が基本
<con7_image>
- 明度
con9 = ImageEnhance.Brightness(image1)
con9_image = con9.enhance(0.5) # 1が基本
con9_image
- シャープネス
con11 = ImageEnhance.Sharpness(image1)
con11_image = con11.enhance(0.5)
con11_image
----
# pillowについて調べた
- 公式
https://pillow.readthedocs.io/en/5.2.x/index.html
- エフェクトはここがわかりやすいね
Qtへの変換も
https://qiita.com/pashango2/items/145d858eff3c505c100a
- タグ取得はここ
https://qiita.com/Gen6/items/88c69ab3a0666895e7a8
- pil はQt変換を標準でサポートしてるのか??
https://dungeonneko.hatenablog.com/entry/2015/07/19/142034
Qpixmapに直接読み込むのとどっちが速いか試してみよう
- 画像貼り付け
Python, Pillowで画像に別の画像を貼り付けるpaste
https://note.nkmk.me/python-pillow-paste/
位置指定して小さい画像を貼り付けできる
----
→ [目次に戻る](https://mimemo.io/m/QORbW4qkvOoda0N)