.jpg -> .wav -> .mp3 -> .wav ->.jpg

流れ
画像を音に変換する。その音をmp3に変換、再度、音から画像に戻す。


元の画像

mp3の場合

mp2の場合

.wmaは.mp3とほとんど同じ。
.oggは元の画像と変化なし

ソースコード

#!/usr/bin/env python
#coding:utf-8

import Image, wave, subprocess

input_file = "diana.jpg"
output_file = "diana_out.jpg"

img = Image.open(input_file)
raw_data = img.tostring()  # 生データを引き抜く

wav = wave.open("dianaXXXX.wav", "wb")
# モノラル、16ビット、サンプリングレートの設定
wav.setnchannels(1)
wav.setsampwidth(2)
wav.setframerate(44100)
# 画像の生データを音にぶっこむ
wav.writeframesraw(raw_data)
wav.close()

# 外部のffmpegで.wavを.mp3に変換し、もう一度.wavに戻す
subprocess.call(['ffmpeg', '-i', 'dianaXXXX.wav', '-ab', '64', '-ar', '44100', 'dianaXXXX.mp3'], shell=False)
subprocess.call(['ffmpeg', '-i', 'dianaXXXX.mp3', 'dianaXXXX.wav'], shell=False)

wave2 = wave.open("dianaXXXX.wav", "rb")
# 音の生データを引き抜く
raw_data2 = wave2.readframes(wave2.getnframes())

# 音の生データを画像にぶっこむ
im2 = Image.fromstring("RGB", img.size, raw_data2)
im2.save(output_file)

アウトロ
少し前に画像を音にしてスピーカーから出力し、マイクで再度拾って画像にフィルタを掛けるというのをやった。それの応用で、mp3に変換し可聴周波数以外が切り取られることで、聞く限界がもたらす画像フィルタとかです多分。
映像にも以上の操作をしてみたのだが、元の映像の画質も悪いせいかノイズまみれで汚かったので今回はパス。気が向いたらそのうち。