toDataUrl() を使用して画像タグのソースを設定すると、保存時の画像が元の画像よりもはるかに大きいことがわかりました。
以下の例では、toDataUrl 関数の 2 番目のパラメーターを指定していないため、デフォルトの品質が使用されています。これにより、元の画像サイズよりもはるかに大きな画像になります。フル品質の 1 を指定すると、生成されるイメージはさらに大きくなります。
なぜこれが起こっているのか、どうすればそれを止めることができるのか誰か知っていますか?
// create image
var image = document.createElement('img');
// set src using remote image location
image.src = 'test.jpg';
// wait til it has loaded
image.onload = function (){
// set up variables
var fWidth = image.width;
var fHeight = image.height;
// create canvas
var canvas = document.createElement('canvas');
canvas.id = 'canvas';
canvas.width = fWidth;
canvas.height = fHeight;
var context = canvas.getContext('2d');
// draw image to canvas
context.drawImage(image, 0, 0, fWidth, fHeight, 0, 0, fWidth, fHeight);
// get data url
dataUrl = canvas.toDataURL('image/jpeg');
// this image when saved is much larger than the image loaded in
document.write('<img src="' + dataUrl + '" />');
}
ありがとう:D
以下に例を示します。残念ながら、イメージをクロスドメインにすることはできないため、jsfiddle イメージの 1 つを取得する必要があります。
画像は 7.4kb ですが、出力中の画像を保存すると 10kb であることがわかります。より詳細な画像では、違いがより顕著になります。toDataUrl の品質を 1 に設定すると、画像は 17kb になります。
これには FireFox 10 も使用しています。Chrome を使用すると、画像サイズはまだ大きくなりますが、それほど大きくはありません。