たいていのアップロードフォームは、どの失敗も同じ一文で報せます。その一文が隠しているチェックは少なくとも4種類あり、直し方はそれぞれ違います。
チェック1:バイト数の制限
いちばんよくある制限で、たいていの人が思い浮かべるのもこれだけです。測っているのはメガピクセルではなくバイト数なので、最近のスマートフォンから出てきた小さそうな画像が、あっさり引っかかることがあります。
直し方は、示された上限ちょうどではなく、少し下の数値まで圧縮することです。システムによってはファイルではなく符号化後のリクエストを測っており、送信時にBase64で符号化されるアップロードは、ディスク上のファイルより3分の1ほど大きくなります。上限より数パーセント下を狙うのに費用はほとんどかからず、この問題ごと消えてくれます。
チェック2:寸法の制限
ファイルサイズとは別物で、しかも明記されていないことが多い制限です。ファイルがどれだけ小さくても、横1200ピクセル以下の写真しか受け付けないフォームがあります。これはどれだけ強く圧縮しても満たせません。縮小するしかありません。フォームが表示サイズを明記しているなら、たいていその近くに上限も設けています。
チェック3:MIMEタイプ
きちんとしたサーバーは拡張子を信用しません。先頭の数バイトを読み、その署名から形式を判定します。PNGを.jpgに改名しても、厳格なサーバーにはPNGのままに見えます。バイトがそう言っているからです。
変換には意味があり、改名には意味がないのはこのためです。デザインツールから「JPEG」として書き出したファイルが弾かれることがあるのも同じ理由で、書き出し側によっては、サーバーのライブラリが受け付けない変種を書いてしまいます。
チェック4:色空間とエンコードの変種
まれですが、実際にあります。CMYKのJPEG、16ビットのPNG、プログレッシブJPEGは、どれも正当なファイルでありながら、古いサーバー側ライブラリには一律で拒否されることがあります。
再エンコードは、手の届く範囲のものを直してくれます。ToolZoolは素の8ビットのピクセルにデコードし、既定でベースラインJPEGを書き出すので、16ビットのPNGは8ビットで、プログレッシブJPEGはベースラインで戻ってきます。どちらも、うるさいサーバーがいちばん受け付けやすい変種です。厄介なのはCMYKのJPEGです。これはウェブ向けではなく印刷工程のファイルなので、確実な直し方は、作ったソフトからRGBで書き出し直すことです。
見分け方
わざと小さいテスト画像を試してください。数キロバイト、数百ピクセル、素のベースラインJPEGです。それが通るなら問題はご自身のファイルにあり、どの軸を変えればいいかもわかっています。まずは圧縮ツールから始めてください。制限が厳しいものなら、50 KBの制限に収めるに手を入れる順番を書いてあります。テスト画像も弾かれるなら、問題はフォームか、セッションか、ブラウザの側にあり、いくら再エンコードしても解決しません。

