Canvas と画像圧縮のサンプルコード

小云云
リリース: 2023-03-17 19:24:01
オリジナル
1473 人が閲覧しました

キャンバス要素は、Web ページ上にグラフィックを描画するために使用されます。 HTML5 の Canvas 要素は、JavaScript を使用して Web ページ上に 2D 画像を描画します。長方形領域のキャンバス上に、JavaScript は 2D グラフィックを描画し、ピクセルごとにレンダリングします。キャンバス要素は、パス、長方形、円、文字の描画、画像の追加など、さまざまな方法で使用できます。この記事では、Canvas と画像圧縮のサンプル コードを共有します。

Canvas画像圧縮処理

次に、Canvas画像圧縮の具体的な処理を具体例を挙げて説明します。

1. ローカル画像入力

1. ローカル ファイルの取得

<!--HTML-->
<input type="file" id="choose-img" />
ログイン後にコピー

// JS
var chooseImg = document.getElementById("choose-img");
chooseImg.onchange = function(e){
    var file = this.files[0];
    // ……  (省略部分代码后续依次展示,下同)
};
ログイン後にコピー

は非常に簡単で、type file のボタンからローカル ファイルを取得するだけです。

2. 取得したローカルファイルの種類を決定します

<!--HTML-->
<p id="result"></p>
ログイン後にコピー

// JS
var result = document.getElementById("result");    // 用于显示图片输出结果,或者错误提示
if(/image/.test(file.type)){     // 判断文件类型是否为图片
    // ……
}
else{
    result.innerHTML = &#39;<span style="color: red;">文件类型有误!</span>&#39;;
}
ログイン後にコピー

3. 取得したローカルイメージをbase64形式で出力します

var img = new Image(),      // 创建图片对象,用于放置原始图片
    reader = new FileReader();
reader.readAsDataURL(file);    // 以base64格式读取并存入FileReader对象的result属性中
reader.onload = function(){
    img.src = this.result;   // 将图片base64字符串直接赋予Image对象的src中
    document.body.insertBefore(img,chooseImg);   // 将输出的图片插入到文件按钮之前
    img.onload = function(){
        // ……
    };
};
ログイン後にコピー

2番目、絵を描くキャンバスで

1. キャンバスを作成します

var canvas = document.createElement(&#39;canvas&#39;);
canvas.width = img.clientWidth;
canvas.height = img.clientHeight;
var context = canvas.getContext(&#39;2d&#39;);
ログイン後にコピー

注: キャンバスのサイズは、入力した画像の幅と高さと同じです。

2.絵を描く

context.drawImage(img,0,0,canvas.width,canvas.height);
ログイン後にコピー

3.絵を圧縮して出力

<!--HTML-->
图片压缩比率 : <input id="rate" type="number" min="0" max="100" /> %
ログイン後にコピー

// JS
var rate = document.getElementById("rate").value || 100;   // 输入图片压缩比率,默认为100%
var imgUrl = canvas.toDataURL(file.type,rate/100);   // 第一个参数为输出图片类型,第二个为压缩比
result.innerHTML = &#39;压缩后:<img src="&#39;+ imgUrl +&#39;" />&#39;;     // 将压缩后的图片置于result中显示
img.style.display = &#39;none&#39;;   // 将原始图片隐藏
ログイン後にコピー

ここでもbase6 4に基づいていますフォーマット出力。

4. 完全なコードの表示

<!--HTML-->
图片压缩比率 : <input id="rate" type="number" min="0" max="100" /> %

ログイン後にコピー

// JS
var chooseImg = document.getElementById("choose-img"),
    result = document.getElementById("result");
chooseImg.onchange = function(e){
    var file = this.files[0];
    if(/image/.test(file.type)){
        var img = new Image(),
            reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function(){
            img.src = this.result;
            document.body.insertBefore(img,chooseImg);
            img.onload = function(){
                var canvas = document.createElement(&#39;canvas&#39;);
                canvas.width = img.clientWidth;
                canvas.height = img.clientHeight;
                var context = canvas.getContext(&#39;2d&#39;);
                context.drawImage(img,0,0,canvas.width,canvas.height);
                var rate = document.getElementById("rate").value || 100;
                var imgUrl = canvas.toDataURL(file.type,rate/100);
                result.innerHTML = &#39;压缩后:<img src="&#39;+ imgUrl +&#39;" />&#39;;
                result.style.display = &#39;block&#39;;
                img.style.display = &#39;none&#39;;
            };
        };
    }
    else{
        result.innerHTML = &#39;<span style="color: red;">文件类型有误!</span>&#39;;
    }
};
ログイン後にコピー

テストの結果、Canvas を介して JPEG 形式の画像を圧縮するのが最も効果的であることが判明しましたが、PNG 圧縮の効果は明ら​​かではなく、場合によっては大きくなります。

上記の内容はCanvasと画像圧縮のサンプルコードです。皆様のお役に立てれば幸いです。

関連する推奨事項:

キャンバスを使用してボールとマウスの相互作用を実現する方法

キャンバスを使用してパーティクルファウンテンアニメーションの効果を作成する方法

HTML5 の Canvas で一般的に使用される描画テクニック

キャンバスでマウスを作る ドラッグしてグラフィックを描く

画像ダウンロード機能を実装するキャンバスを使ったHTML5のサンプル詳細説明

以上がCanvas と画像圧縮のサンプルコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート