with the flow

WEBプログラマを目指すWEBデザイナーが書き綴る開発日誌のようなもの

Mobile Safariのフォームからのfile uploadで、png24/32がjpegになってしまう

結論から。
iOS6から可能になった、ファイルをアップロードするinput type="file"ですが、
表題にもあるように、PNGを送信する前に強制的にjpegに変換されてから送信されるようです。

今のところ解決策は見つかっていません。
iOS7は未確認。解決してるといいなぁ...(遠い目)

ちなみにiOS6のChrome for iOSでも同じでした。
同じフォームのURLをPC(Chrome)で開き、アップロードすると、
正常にPNGのままアップされたので、コードやサーバの設定などが問題ではないと思います。。

いろいろググってみたんですが、そもそもあまり需要がないのか、
同じ現象自体が見つからない。。

iOS標準のキャプチャ(ホームボタン+電源ボタンで撮るやつ)って、
内部ではPNGで保存されてるので、
それをそのまま持ってきたいことってあるんですよね。。。

たとえば、きれいなグラデーションがかかった画面をキャプチャして、
それをアップロードすると、ブラウザ側で勝手にjpeg変換(=非可逆圧縮)されるので
ビミョーにノイズが乗ってしまうという。

※当然だけど、メールで送ったり、dropboxiTunesで同期したりするとPNGのまま取得できます。

なんかバグチケットみたいなエントリーになっちゃいましたが、
はじめ自分のコードが悪いのかと思って散々調べた挙句の結果がこれだったので
一応共有しておきます。