私は、ユーザーがいくつかの画像を作成してサーバーに送信できる、WeChat プラットフォーム用の JavaScript で記述された小さな webapp を持っています。
画像の作成は Canvas2D を使用して行います。
canvas.toDataURL(type,quality) から受信した画像データ文字列を使用してサーバーに画像を送信すると、サーバー PHP スクリプトは、webapp から受信したサーバー側でバイナリ JPG ファイルを作成します。
私が試したすべての電話 (Samsung S3/4/5、Xiaomi、Huawei Honor、Lenovo、Nexus 4/5、iPhone 4S/5/5S/6/6S、iPads...) で問題なく動作します。 . クライアントの Samsung Note 2 を除きます。
彼らのデバイスは、私の Android フォンと同じように、Android 4.3 と最新の WeChat (6.2.6) を実行しています。ただし、写真を提出すると、ファイルサイズは 6 ~ 7 倍大きくなります。
確認したところ、実際に受け取ったファイルはJPGではなくPNGです。
Canvas2D 画像から画像データ文字列を取得するために使用するコードは次のとおりです。
var jpgData = this.finalPicCanvas.toDataURL("image/jpeg",0.5);
このデータ文字列を受け取る PHP スクリプトを設定して、ログ、ヘッダーの内容、受け取った文字列のサイズなどを書き留めました。 JavaScript コードでは「image/jpeg」に設定されています。
これは、png ヘッダーと大きなデータ サイズを示すログです: http://snag.gy/ma39y.jpg
jpg ヘッダーと通常のデータ サイズを示すログは次のとおりです: http://snag.gy/enPvZ.jpg
私は困惑しています、私は何を間違えましたか?仕様を確認したところ、toDataURL は Android 3.4 以降でサポートされているはずです
ブラウザは PNG をサポートする必要がありますが、他の形式をサポートする必要はなく、提供された型が認識されない場合は PNG を返すという 2011 年の仕様を見つけました: http://www.w3.org/TR/ 2011/WD-html5-20110405/the-canvas-element.html#dom-canvas-todataurl
とはいえ、2015年というWebGLやモバイルの時代を考えると、自分にできることは何もないとは思えません。
誰にも解決策がありますか?高く評価!!!