Gambar adalah salah satu hal pertama yang menjadi fokus sebagian besar pengguna. Jadi, masuk akal untuk menggunakan gambar detail di situs web untuk meningkatkan pengalaman pengguna. Namun memiliki gambar yang terlalu besar dapat menimbulkan citra negatif pada waktu buka situs web, sehingga mengakibatkan penurunan pengalaman. Oleh karena itu, sangat penting untuk menjaga keseimbangan antara detail gambar dan kinerja situs web.

Kita harus mempertimbangkan tiga hal sebelum mengoptimalkan. Mereka:

  • Format Gambar
  • Resolusi gambar
  • Kualitas Kompresi

Format Gambar

Format Gambar memainkan peran penting dalam menentukan bagaimana suatu gambar disimpan, ditampilkan, dan ditransmisikan. Ini juga menentukan jenis kompresi apa yang dapat dilakukan dan apakah gambar mendukung saluran alfa (transparansi). Kita perlu memilih format gambar yang tepat sesuai dengan kebutuhan kita. Beberapa format gambar populer untuk web adalah:

PNG: Gambar berformat .png mendukung transparansi dan menggunakan kompresi lossless, yaitu tidak ada data gambar asli yang hilang. Oleh karena itu, ukuran gambar relatif tinggi.

JPEG:Menggunakan kompresi lossy, yang mengurangi ukuran file dengan membuang beberapa data gambar. Kompresi ini dapat menghasilkan ukuran file yang lebih kecil dibandingkan dengan format lossless seperti PNG. Tapi tidak memiliki saluran alpha.

WEBP: Ini adalah format file yang relatif baru dan mendukung kompresi lossy dan lossless. Ini juga mendukung transparansi.

Berdasarkan persyaratan kita harus memilih format file yang sesuai.

Resolusi gambar

Resolusi Gambar berbanding lurus dengan ukuran gambar artinya memperbesar atau memperkecil resolusi akan memberikan efek serupa pada ukuran gambar. Resolusi monitor paling populer adalah 1080p dan sebagian besar pengguna menggunakan ponsel yang bahkan menggunakan resolusi rendah (Resolusi Relatif). Jadi, menggunakan resolusi yang terlalu besar adalah suatu pemborosan. Kami dapat memperbaikinya dengan menskalakan gambar ke resolusi yang sesuai berdasarkan perangkat target

Kualitas Kompresi

Kualitas Kompresi berdampak langsung pada kualitas gambar. Menerapkan kompresi tinggi akan mengakibatkan hilangnya detail. Kita harus menemukan keseimbangan sempurna antara kualitas kompresi dan tingkat detail yang dapat diterima dalam gambar.

Mengoptimalkan gambar menggunakan perpustakaan bantal python

Sebelum menulis kode kita harus menentukan jenis optimasi apa yang perlu digunakan.

Format Gambar

Saya menggunakan .jpg sebagai format file pilihan saya karena saya tidak memerlukan transparansi dan tidak seperti .webp, .jpg didukung secara luas. Sampai sekarang, saya dapat menggunakan .jpg di dokumen tetapi tidak .webp.

Resolusi gambar

Untuk resolusi gambar diperlukan tiga ukuran gambar, satu untuk thumbnail, satu untuk tampilan web normal, dan yang terakhir adalah gambar berkualitas tinggi untuk konten yang dapat diperbesar. Resolusi pilihan saya untuk masing-masingnya adalah 160p, 900p, dan 1440p.

Kualitas Kompresi

Dan terakhir, saya menggunakan kualitas kompresi 80%.

Nilai ini dapat diubah sesuai kebutuhan

Pengkodean

Untuk skrip ini perpustakaan bantal harus diinstal

pip pasang bantal

Gambar Pembuka

from PIL import Image
original_image = Image.open(input_image)

Penskalaan Gambar

Pada awalnya resolusi ditetapkan sebagai konstan

THUMBNAIL_WIDTH = 160
MEDIUM_SIZE_WIDTH = 900
HIGH_SIZE_WIDTH = 1800

Saat menskalakan gambar kita harus menjaga rasio aspek

def resize_image(image, width):
    aspect_ratio = image.width / image.height
    height = int(width / aspect_ratio)
    return image.resize((width, height))

Kemudian gambar tersebut diperkecil menggunakan

def generate_scaled_image(original_image):
    thumbnail_image = resize_image(original_image, THUMBNAIL_WIDTH)
    medium_size_image = resize_image(original_image, MEDIUM_SIZE_WIDTH)
    high_size_image = resize_image(original_image, HIGH_SIZE_WIDTH)
    return thumbnail_image, medium_size_image, high_size_image

Mengompresi dan menyimpan

Gambar dikompresi dan disimpan sebagai

thumbnail_image.save(thumbnail_image_path,
                             optimize=True, quality=COMPRESSION_QUALITY)
medium_size_image.save(medium_size_image_path,
                               optimize=True, quality=COMPRESSION_QUALITY)
high_size_image.save(high_size_image_path,
                             optimize=True, quality=COMPRESSION_QUALITY)

Ini kode lengkapnya

import sys
from PIL import Image
import os

# Three images will be created from this image.
# The first image will be a 128x128 thumbnail
# The second will be medium quality image
# The third will be a high quality image
THUMBNAIL_WIDTH = 168
MEDIUM_SIZE_WIDTH = 900
HIGH_SIZE_WIDTH = 1800

# Compress image to reduce size
COMPRESSION_QUALITY = 80


def resize_image(image, width):
    aspect_ratio = image.width / image.height
    height = int(width / aspect_ratio)
    return image.resize((width, height))


def generate_scaled_image(original_image):
    thumbnail_image = resize_image(original_image, THUMBNAIL_WIDTH)
    medium_size_image = resize_image(original_image, MEDIUM_SIZE_WIDTH)
    high_size_image = resize_image(original_image, HIGH_SIZE_WIDTH)
    return thumbnail_image, medium_size_image, high_size_image


def main():
    if len(sys.argv) < 3:
        print("Usage: python script.py image_name input_image storage_path")
        return

    image_name = sys.argv[1]
    input_image = sys.argv[2]
    storage_path = sys.argv[3]

    if not os.path.exists(storage_path):
        os.makedirs(storage_path + '/thumbnail')
        os.makedirs(storage_path + '/medium')
        os.makedirs(storage_path + '/high')

    try:
        original_image = Image.open(input_image)
    except Exception as e:
        print("Error opening the input image:", e)
        return

    thumbnail_image_path = os.path.join(
        storage_path, 'thumbnail', image_name + '.jpg')
    medium_size_image_path = os.path.join(
        storage_path, 'medium', image_name + '.jpg')
    high_size_image_path = os.path.join(
        storage_path, 'high', image_name + '.jpg')

    thumbnail_image, medium_size_image, high_size_image = generate_scaled_image(
        original_image)

    try:
        thumbnail_image.save(thumbnail_image_path,
                             optimize=True, quality=COMPRESSION_QUALITY)
        medium_size_image.save(medium_size_image_path,
                               optimize=True, quality=COMPRESSION_QUALITY)
        high_size_image.save(high_size_image_path,
                             optimize=True, quality=COMPRESSION_QUALITY)
        print(image_name + '.jpg', "saved successfully")
    except Exception as e:
        print("Error saving images:", e)


if __name__ == "__main__":
    main()

Kesimpulan

Berikut adalah contoh sederhana bagaimana kita dapat menghasilkan gambar yang dioptimalkan dari gambar berkualitas tinggi yang tidak dikompresi.