検索
ホームページウェブフロントエンドjsチュートリアルCanvas の toDataURL() メソッドは、画像を dataURL (base64) に変換します。

この記事では主に、canvas で toDataURL() を使用して画像を dataURL (base64) に変換する方法について詳しく紹介します。この記事は、あらゆる人の学習や作業に役立つ情報を提供します。友達の皆さん、ぜひ編集者をフォローして一緒に学んでください。皆さんのお役に立てれば幸いです。

画像を Base64 に変換する利点

画像を Base64 エンコードに変換すると、ファイルをアップロードせずに、画像を他の Web ページやエディターに簡単に挿入できるようになります。 画像を保存する場所を見つける必要がないため、小さな画像の場合には非常に便利です。

画像を Web 上の小さな画像に一般的に使用される Base64 エンコードに変換すると、画像リクエスト (js および css コードに収集される) の数が削減されるだけでなく、何らかの相対パスやエラーによって引き起こされる画像 404 エラーも防ぐことができます。その他の問題もございます。

はじめに

アプリケーション シナリオを想定します。いくつかの特別な理由により、画像パスがサーバーから要求され、対応する画像の Base64 dataURL をこのパスを通じて取得する必要があります。このシナリオでは、最初に画像パスがアクセス可能であると推測し、画像を dataURL に変換する方法も必要です。

どうすればそれを達成できますか?

dataURL

まず、変換されたコンテンツが正しいかどうかを確認するのに役立つ、オーソドックスな dataURL の構文を簡単に確認してみましょう。完全な dataURI は次のようになります。

data:[<mediatype>][;base64],<data></data></mediatype>

メディアタイプは、「image/png」、「text/plain」などの MIME ルールに従ってファイル タイプを宣言し、その後にエンコード タイプが続きます。ここでは、base64 についてのみ説明します。ファイルのエンコードされたコンテンツ。 HTML で img タグの src が次のように記述されているのをよく見かけます:

src="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSpa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJlZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uisF81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7"

この img は、base64 でエンコードされた dataURL を参照します。ブラウザがサポートしている限り、gif 画像にデコードしてレンダリングできます。

.toDataURL()

FileReader オブジェクトにも .readAsDataURL() などの同様のメソッドがありますが、ファイルまたは BLOB タイプのみを受け入れ、これら 2 つのタイプは通常、 要素 files 属性を取得するか、Blob() コンストラクターを使用して新しいオブジェクトを手動で作成します。恥ずかしいことに、現在はブラウザのセキュリティ ポリシーの対象となる画像パスしかなく、 の files 属性は読み取り専用であり、Blob() コンストラクターは file のみを受け入れます。どちらの方法でも、画像パスから直接取得することはできません。上記で想定したアプリケーション シナリオでは、最初にパスを通じて画像コンテンツを取得する方法を検討する必要があります。 Canvas の toDataURL() メソッドは、画像を dataURL (base64) に変換します。 は OK で、 に描画できます。 には .toDataURL() メソッドがあります。

すべての準備が完了しました。Canvas の toDataURL() メソッドは、画像を dataURL (base64) に変換します。 で取得した画像を に配置し、それを .toDataURL() メソッドを通じて変換して、base64 でエンコードされた dataURL を取得するだけです。このメソッドの構文を見てみましょう:

canvas.toDataURL([type, encoderOptions]);

canvas は DOM 要素 オブジェクトです。指定されたタイプがサポートされていない場合は、デフォルト値の image/png に置き換えられます。 ; encoderOptions は image/jpeg または image /webp タイプのピクチャで画質を設定できます。値は 0 ~ 1 で、それを超える場合はデフォルト値の 0.92 に置き換えられます。

dataURL に変換する前に、まず画像が正常にロードされていることを確認する必要があることに注意してください。そのため、.toDataURL() メソッドを Canvas の toDataURL() メソッドは、画像を dataURL (base64) に変換します。 の onload 非同期イベントに記述する必要があります。次に、関数関数を実装しましょう:

 function getBase64(url){
  //通过构造函数来创建的 img 实例,在赋予 src 值后就会立刻下载图片,相比 createElement() 创建 <img  alt="Canvas の toDataURL() メソッドは、画像を dataURL (base64) に変換します。" > 省去了 append(),也就避免了文档冗余和污染
  var Img = new Image(),
   dataURL='';
  Img.src=url;
  Img.onload=function(){ //要先确保图片完整获取到,这是个异步事件
   var canvas = document.createElement("canvas"), //创建canvas元素
    width=Img.width, //确保canvas的尺寸和图片一样
    height=Img.height;
   canvas.width=width;
   canvas.height=height;
   canvas.getContext("2d").drawImage(Img,0,0,width,height); //将图片绘制到canvas中
   dataURL=canvas.toDataURL('image/jpeg'); //转换图片为dataURL
  };
 }

画像がロードされた後、いつでも呼び出すことができる変換関数が完成しました。

改善

onload イベントにより、読み込み後に変換タスクが確実に実行されますが、新たな問題が発生します。dataURL は画像が読み込まれた後にのみ返され、画像がいつ読み込まれたかを判断できません。 dataURL を後で処理する必要がある場合 (他のサーバーに渡す場合など)、コールバックを追加する必要があります。これにより、dataURL が正常に取得された後に後続の処理タスクが実行されるようにすることができます。 : 実行中に

 function getBase64(url,callback){ //添加一个回调参数
  ...
  Img.onload=function(){
   ...
   canvas.getContext("2d").drawImage(Img,0,0,width,height);
   dataURL=canvas.toDataURL('image/jpeg');
   callback?callback(dataURL):null; //调用回调函数
  };
 }

コールバックを追加:

 getBase64('//upload.jianshu.io/users/upload_avatars/555630/fdd1b798e6b0.jpg',(dataURL)=>{
  console.log(dataURL);
 });

以上です。互換性を考慮しない場合は、Promise と Generator を使用して実装でき、エラー処理を追加すると完璧になります。

関連する推奨事項:

html5 Canvas は画像の回転を実現します

jquery プラグイン Canvaspercent.js はパーセンテージ ラウンド ケーキ効果のサンプル共有を実装します

Canvas が画像を処理する方法

以上がCanvas の toDataURL() メソッドは、画像を dataURL (base64) に変換します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター