

macOS Catalina (10.15.7) を使用しています。

画像アップロードの容量上限（ファイルサイズ上限）が設けられたフォームなどで、その容量を越えた場合きちんとバリデーションチェックできているかを調べるため、テスト用の画像ファイルを用意することがあるかと思います。  
例えば10MBが上限の場合に10MBの画像を用意するなどです。

ファイルサイズを指定したテストデータの作成であれば`dd`コマンドで行けるかと思い、下記の記事など参考に拡張子だけjpgにしたファイルを作成したのですが、  
<https://qiita.com/toshihirock/items/6cb99a85d86f524bc153>  
サーバー側で画像の破損チェックもしくはMIMEタイプチェックに引っかかったのかエラーになってしまったので、実際の画像をリサイズなどして指定の容量にできないかと考えました。

この辺りの記事を参考に、`jpegoptim`というライブラリを使ってみましたが、  
<https://sato-labo.mydns.jp/2017/02/jpegoptim/>  
`-S500`などのオプションを付けて処理をしてみても、上ブレしたり下ブレしたりと、狙った通りのキリの良いファイルサイズにはなりませんでした。

ピッタリ指定容量の画像ファイルを作成する方法についてどなたかご存知でしたら、ご教授いただけないでしょうか？（そのような方法は存在するのでしょうか？）


CC BY-SA 4.0
2021-06-10T08:34:10.133
77460
2021-06-11T06:35:00.300
43186
question
macos 画像
容量を指定して画像ファイルを作成したい


適当な目的より小さめのjpegファイルの後ろに、ddで作った端数分のゴミ付けて  
埋めたらたらどうでしょうか。

MIMEを判定しているライブラリの多くはヘッダしか見ていないようですし、  
jpegをデコードして表示する場合も、よく使われているlibjpegは、jpeg  
ファイルの後ろのゴミを無視するだけで警告のみで正常にデコードします。

ワンライナーで書くとこんな感じです。丁度30000byteのnice.jpgを、  
それより小さいtest.jpgの後ろにゼロ埋めしたデータをくっつけ作っています。

[code]

    $ 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
    
[/code]


CC BY-SA 4.0
2021-06-11T06:00:46.113
77475
2021-06-11T06:35:00.300
2021-06-11T06:35:00.300
46806
46806
77460
answer