ビットマップパターンにデータをエンコードし、Piet言語のようにイメージをデータにデコードするライブラリがPythonにはありますか?Pythonを使用してイメージに文字列をエンコードする
のHello Worldは、ピエト
UPDATEと
は、私はその後、こんにちは、世界またはURLのように、文字列を取得し、画像としてそれをエンコードしたいですこのイメージを読んで、文字列にデコードします。 QRコードのようなものですが、ビットマップを使用しています。
ビットマップパターンにデータをエンコードし、Piet言語のようにイメージをデータにデコードするライブラリがPythonにはありますか?Pythonを使用してイメージに文字列をエンコードする
のHello Worldは、ピエト
UPDATEと
は、私はその後、こんにちは、世界またはURLのように、文字列を取得し、画像としてそれをエンコードしたいですこのイメージを読んで、文字列にデコードします。 QRコードのようなものですが、ビットマップを使用しています。
image manipulation
またはimage processing
の計画によっては、Python Image Library PILがお探しのものになる場合があります。以下は
デモコード
from PIL import Image
from PIL import ImageFilter
i = Image.open("gImage1.jpg")
im2 = i.filter(ImageFilter.EMBOSS)
im3 = i.filter(ImageFilter.FIND_EDGES)
im2.save("gImage1_EMBOSS.jpg")
im3.save("gImage1_FIND_EDGES.jpg")
入力画像内で利用可能な他の多数の画像処理とピクセル操作ツールがありますhere 由来作り付けのフィルタを適用するデモコードであり、
イメージをロードしたりフィルタを適用したりすると、実際にOP質問がどのように表示されますか? – jsbueno
画像として使用するときのデータの表示方法の指定が必要です。 これは、エンコードを行う既存のコードよりもはるかに重要です。
Piet Languageの場合、まさにこれが起こります。これが「言語仕様」です。そこから、人々はitnerpretersとツール(Python interpreterを含む他の様々な言語で)を構築しました。
しかし、画像に任意のデータをエンコードし、それを元に戻したい場合は、最初にどのようにエンコードする必要があるのかを伝える必要があります。最も簡単な方法は、データの各バイトが1ピクセルのカラーチャネルであり、エンコードされたデータの正確な長さを決定し、一番下のイメージ行をパディングする方法です。
これは、Python Imaging Library(Pillow)のImage.frombytes
メソッドでは簡単ですが、イメージは喜ばしくありません。
また、任意のデータを与えられた入力データを単に "流出させる" PietプログラムをコンパイルするためのPythonプログラムを構築することもできます。上記のpietインタプリタはデータをデコードできます。
この例では、データ長にあらかじめ4バイト、黒で下のピクセルをパディングしている、カラフルな画像として.wavサウンドファイル(これはPythonコンソールでこれを行いました)をパックします。
import struct
from PIL import Image
data = open("2600PacManDies.wav", "rb").read()
size = struct.pack("<I", len(data))
image_side = int(((len(data) + len(size))/3.0) ** 0.5) + 1
img = Image.frombytes("RGB", (image_side, image_side) , size + data + b"\x00" * (image_side ** 2 * 3 - (len(size) + len(data)) ))
img.save("2600_pacman_dies.png")
(私は生のサウンドデータファイルを使用してきたように、1にも画像を見たデータで、いくつかのパターンを発見することができますが - 最も明白なもの静かな瞬間を意味するブラックストライプを)
は、なぜあなたはこのスレッドをクローズしようとしていますか? – bodruk
Piet言語は画像内にデータをエンコードしません。 Pietプログラムのソースコードはイメージであり、PietインタプリタはPietソースイメージを実行できます。 –
私の近い投票の理由は、 "あなたが求めているものは不明"だったでしょう。この質問は不明です。とにかく@jsbuenoが勇敢な試みをするのを止めたわけではありません。 –