ホームページ  >  記事  >  バックエンド開発  >  Golang を使用して画像を段階的に読み込み、圧縮する方法

Golang を使用して画像を段階的に読み込み、圧縮する方法

王林
王林オリジナル
2023-08-18 12:46:581497ブラウズ

Golang を使用して画像を段階的に読み込み、圧縮する方法

Golang を使用して画像を段階的に読み込んで圧縮する方法

1. はじめに
現在、インターネット上で画像を使用することが非常に一般的になりました。しかし、大きな画像の読み込みが遅い、段階的に表示できないなどの問題も頻繁に発生し、ユーザーエクスペリエンスに影響を与えます。この記事では、Golang を使用して画像を段階的に読み込んで圧縮し、ユーザーの読み込み速度とエクスペリエンスを向上させる方法を紹介します。

2. プログレッシブ読み込み
いわゆるプログレッシブ読み込みとは、画像が完全に読み込まれる前に、その品質のごく一部を徐々に表示できることを意味します。

Golang では、サードパーティ ライブラリ「github.com/chai2010/webp」を使用してプログレッシブ読み込みと圧縮処理を実行しました。次に、全体のプロセスを段階的に理解していきます。

3. 依存ライブラリのインストール
まず、ターミナルを開いて次のコマンドを実行して、「webp」ライブラリをインストールします:

go get -u github.com/chai2010/webp

4. プログレッシブ読み込みコードの例
以下はコード例は、Golang を使用して画像をプログレッシブにロードおよび圧縮する方法を示します:

package main

import (
    "fmt"
    "github.com/chai2010/webp"
    "image/jpeg"
    "log"
    "os"
)

func main() {
    file, err := os.Open("path/to/image.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    img, err := jpeg.Decode(file)
    if err != nil {
        log.Fatal(err)
    }

    dest, err := os.Create("path/to/progressive_image.webp")
    if err != nil {
        log.Fatal(err)
    }
    defer dest.Close()

    options := webp.Options{
        Lossless:        false,
        Quality:         80,
        Method:          6,
        SnsStrength:     50,
        FilterSharpness: 0,
    }

    err = webp.Encode(dest, img, &options)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Progressive image generated successfully!")
}

上記のコードは、最初に画像を開きます。ロード中にエラーが発生した場合は、エラー メッセージが出力されます。次に、jpeg.Decode 関数を使用して、画像をメモリ内の画像構造にデコードします。次に、ターゲット ファイルを作成し、webp.Options 構造体を使用して、圧縮を失うかどうか、品質、方法、SNS 強度などのプログレッシブ ローディングのパラメーターを設定します。最後に、webp.Encode 関数を呼び出して、画像をプログレッシブ ロードされる webp 形式にエンコードし、ターゲット ファイルに出力します。

5. 圧縮処理
プログレッシブ読み込みに基づいて、ファイル サイズを削減し、読み込み速度とユーザー エクスペリエンスを向上させるために画像を圧縮する必要もあります。

次のサンプル コードは、Golang を使用して画像を圧縮する方法を示しています:

package main

import (
    "bytes"
    "fmt"
    "github.com/chai2010/webp"
    "image"
    "image/jpeg"
    "log"
    "os"
)

func main() {
    file, err := os.Open("path/to/image.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    img, err := jpeg.Decode(file)
    if err != nil {
        log.Fatal(err)
    }

    dest, err := os.Create("path/to/compressed_image.webp")
    if err != nil {
        log.Fatal(err)
    }
    defer dest.Close()

    options := webp.Options{
        Lossless:        false,
        Quality:         80,
        Method:          6,
        SnsStrength:     50,
        FilterSharpness: 0,
    }

    buff := new(bytes.Buffer)
    err = webp.Encode(buff, img, &options)
    if err != nil {
        log.Fatal(err)
    }

    err = webp.Write(dest, buff.Bytes())
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Compressed image generated successfully!")
}

上記のコードは基本的にプログレッシブ ローディング コードと同じです。唯一の違いは、最終的に圧縮が実行されることです。 webp.Write 関数結果の画像データはターゲット ファイルに書き込まれます。

上記のコード例を通じて、Golang を使用して画像を段階的に読み込んで圧縮し、ユーザーの読み込み速度とエクスペリエンスを向上させる方法を学びました。この記事がお役に立てば幸いです。 Golang の学習には多くの課題が伴いますが、実際的な問題を解決するためのより多くのツールやライブラリも提供されます。画像処理、ネットワーク通信、その他の分野であっても、Golang は強力で人気のある選択肢です。

以上がGolang を使用して画像を段階的に読み込み、圧縮する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。