質問: macOS Catalina (10.15.7) を使用しています。 画像アップロードの容量上限(ファイルサイズ上限)が設けられたフォームなどで、その容量を越えた場合きちんとバリデーションチェックできているかを調べるため、テスト用の画像ファイルを用意することがあるかと思います。 例えば10MBが上限の場合に10MBの画像を用意するなどです。 ファイルサイズを指定したテストデータの作成であれば`dd`コマンドで行けるかと思い、下記の記事など参考に拡張子だけjpgにしたファイルを作成したのですが、 サーバー側で画像の破損チェックもしくはMIMEタイプチェックに引っかかったのかエラーになってしまったので、実際の画像をリサイズなどして指定の容量にできないかと考えました。 この辺りの記事を参考に、`jpegoptim`というライブラリを使ってみましたが、 `-S500`などのオプションを付けて処理をしてみても、上ブレしたり下ブレしたりと、狙った通りのキリの良いファイルサイズにはなりませんでした。 ピッタリ指定容量の画像ファイルを作成する方法についてどなたかご存知でしたら、ご教授いただけないでしょうか?(そのような方法は存在するのでしょうか?)
回答: 適当な目的より小さめのjpegファイルの後ろに、ddで作った端数分のゴミ付けて 埋めたらたらどうでしょうか。 MIMEを判定しているライブラリの多くはヘッダしか見ていないようですし、 jpegをデコードして表示する場合も、よく使われているlibjpegは、jpeg ファイルの後ろのゴミを無視するだけで警告のみで正常にデコードします。 ワンライナーで書くとこんな感じです。丁度30000byteのnice.jpgを、 それより小さいtest.jpgの後ろにゼロ埋めしたデータをくっつけ作っています。 ``` $ size_tobe=30000; frac=$(expr ${size_tobe} - $(stat --printf="%s" test.jpg)); dd if=/dev/zero of=frac.dat bs=1 count=$frac; cat test.jpg frac.dat > nice.jpg ```