私の入り浸っているマストドンインスタンスのPhotodnで、18年9月頃から、写真ファイルのアップロードが上手くいかない問題が発生。
発生条件がなかなかわからなかったり、そもそも私以外は発生してないらしいで困ってたんだけども、多少原因が見えてきたのでここに記す。
Photodnに書き込むにはちょっと長いので。
発生状況
Windows 10上のブラウザでPhotodnを開いて、トゥートに写真ファイルを追加しようとすると、このアップロード中ゲージが全く進まない。
ブラウザ側の問題かと思い、Chrome、Firefox、Edgeで試したが、いずれも全く同じように止まる。
ファイルによってはアップロードできる場合もある。
もう少し詳細に追求すると、「PENTAX K-70で撮影したRAWファイル(.PEF)を、IrfanViewで開いて、リサイズするなどしてJPEGで保存する」時に発生するようだった。(この作業手順を簡易現像とします)
でもって、Exifを削除するとアップロードできることがわかった。Exifが悪いらしい。
.PEFファイルを、PENTAX Digital Camera Utility (純正現像ソフト)で現像してJPEG保存したものなら、問題なくアップロードできた。
Exifを調べる
そこで、「.PEFをIrfanViewで簡易現像したもの」と「純正ソフトで現像したもの」のExif情報を見比べると、かなり違いがあることがわかった。
また、Exifの仕様については、CIPAのウェブサイトでPDFで公開されているので、それを見ながらあれこれ確認。
すると、そもそもの話として、非圧縮の画像データとJPEG圧縮の画像データで別の記録内容になっていることがわかった。
IrfanViewで.PEFを開いてJPEGに保存すると、非圧縮である.PEFについていたExif情報が、そのまま圧縮データのJPEGファイルに全く同内容でコピーされてしまう。なので、規格上おかしなExif情報がついたファイルができあがるわけだ。
ImageWidth | 6080 |
ImageLength | 4064 |
BitsPerSample | |
Compression | 1 (Unknown) |
PhotometricInterpretation | 32733 |
StripOffset | 159552 |
SamplesPerPixel | 1 |
RowsPerStrip | 4064 |
StripByteCount | 32538711 |
PlanarConfiguration | 1 |
IrfanViewで簡易現像したJPEGファイルのExifを見ると、純正現像したもののExifにはない項目がこれだけあった。
で、これらの多くは、Exifのルール上「JPEG圧縮データではJPEGマーカで代用されるので記録してはならない」とされている項目だった。存在していること自体が規格上不当。
CompressionはJPEGでも存在していいが、JPEGなら値は8。
IrfanView上でリサイズしてから保存しても、ImageWidth・ImageHeightの値は更新されないなど、色々と齟齬が生じたりもしているようだ。
解決方法
Exifを消してアップロードすればよい。
写真系SNSなんだからExifつけときたいなー、と思ったけど、どっちみちMastodonがExifを削除してしまうようだ。
それに今まで気付いてなかったということは、他の人の写真のExifを確認したこともなかったということで。