JavaScriptで画像データのURLを取得しますか?質問する

JavaScriptで画像データのURLを取得しますか?質問する

いくつかの画像 (通常の HTML タグのみ) を含む通常の HTML ページがあります<img />。画像を再ダウンロードせずに (つまり、ブラウザによって既に読み込まれているので、今度はコンテンツが必要なので)、できれば base64 でエンコードされたコンテンツを取得したいと考えています。

Greasemonkey と Firefox を使ってそれを実現したいと思っています。

ベストアンサー1

注:これは、画像がページと同じドメインにあるか、属性を持ちcrossOrigin="anonymous"、サーバーが CORS をサポートしている場合にのみ機能します。また、元のファイルではなく、再エンコードされたバージョンが返されます。結果を元のファイルと同じにする必要がある場合は、海堂の答え


正しい寸法のキャンバス要素を作成し、関数を使用して画像データをコピーする必要がありますdrawImage。次に、toDataURL関数を使用して、base-64 でエンコードされた画像を含む data: url を取得できます。画像は完全に読み込まれている必要があることに注意してください。そうしないと、空の (黒、透明) 画像が返されます。

次のようになります。私は Greasemonkey スクリプトを書いたことがないので、その環境で実行するにはコードを調整する必要があるかもしれません。

function getBase64Image(img) {
    // Create an empty canvas element
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;

    // Copy the image contents to the canvas
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);

    // Get the data-URL formatted image
    // Firefox supports PNG and JPEG. You could check img.src to
    // guess the original format, but be aware the using "image/jpg"
    // will re-encode the image.
    var dataURL = canvas.toDataURL("image/png");

    return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}

JPEG 形式の画像の取得は Firefox の古いバージョン (3.5 前後) では機能しないため、これをサポートする場合は互換性を確認する必要があります。エンコードがサポートされていない場合は、デフォルトで "image/png" になります。

おすすめ記事