Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyelesaikan masalah kegagalan pemampatan imej php

Bagaimana untuk menyelesaikan masalah kegagalan pemampatan imej php

PHPz
PHPzasal
2023-03-24 14:57:191210semak imbas

PHP ialah bahasa pengaturcaraan web popular yang turut menduduki kedudukan penting dalam bidang pemprosesan imej. Walaupun PHP dilengkapi dengan banyak fungsi pemprosesan imej, dalam projek saya baru-baru ini, saya menghadapi masalah yang mengecewakan - pemampatan imej gagal.

Dalam projek ini, saya perlu memampatkan imej yang dimuat naik pengguna kepada saiz dan kualiti yang ditentukan untuk paparan dalam aplikasi web. Untuk mencapai ini, saya menggunakan fungsi pemprosesan imej daripada perpustakaan PHP GD. Walau bagaimanapun, walaupun saya mengikuti semua amalan terbaik yang disyorkan seperti menetapkan had memori, menyemak format imej dan menggunakan versi perpustakaan terkini, saya masih tidak berjaya memampatkan imej.

Mula-mula, saya cuba menggunakan fungsi imagejpeg dalam kod untuk memampatkan imej JPEG. Inilah kod yang saya cuba:

<?php
// Load the image
$image = imagecreatefromjpeg(&#39;image.jpg&#39;);

// Resize the image
$resizedImage = imagescale($image, 200);

// Compress and save the image
imagejpeg($resizedImage, &#39;compressed.jpg&#39;, 80);
?>

Walaupun saya mencuba pelbagai kualiti mampatan yang berbeza, imej yang terhasil sentiasa menjadi lebih besar daripada imej asal, bukan lebih kecil. Saya telah mencuba versi perpustakaan JPEG yang berbeza tetapi masih tidak berjaya.

Seterusnya, saya mula bereksperimen dengan format imej lain seperti PNG dan WebP. Saya menggunakan kod berikut untuk memampatkan imej PNG:

<?php
// Load the image
$image = imagecreatefrompng(&#39;image.png&#39;);

// Resize the image
$resizedImage = imagescale($image, 200);

// Compress and save the image
imagepng($resizedImage, &#39;compressed.png&#39;, 9);
?>

Walau bagaimanapun, saya menghadapi masalah yang sama sekali lagi - imej yang terhasil adalah lebih besar daripada imej asal.

Akhir sekali, saya mencuba format WebP Google dalam usaha untuk mengurangkan saiz imej. Saya menggunakan perpustakaan libwebp dan kod berikut untuk memampatkan imej:

<?php
// Load the image
$image = imagecreatefromjpeg(&#39;image.jpg&#39;);

// Resize the image
$resizedImage = imagescale($image, 200);

// Convert the image to WebP format
imagewebp($resizedImage, &#39;compressed.webp&#39;, 80);
?>

Malangnya, saya tidak berjaya memampatkan imej, walaupun menggunakan format WebP.

Selepas banyak percubaan, akhirnya saya jumpa penyelesaiannya. Masalahnya ialah saya menggunakan imagescale dalam kod saya. Fungsi ini sebenarnya menjana salinan baharu imej, bukannya memampatkan imej asal. Oleh itu, menggunakan fungsi ini menyebabkan imej yang terhasil lebih besar daripada imej asal.

Untuk menyelesaikan masalah ini, saya sebaliknya menggunakan fungsi imagecopyresampled, yang memampatkan imej asal tanpa membuat salinan baharu imej tersebut. Berikut ialah kod yang berjaya saya ubah suai:

<?php
// Load the image
$image = imagecreatefromjpeg(&#39;image.jpg&#39;);

// Get the original dimensions of the image
$width = imagesx($image);
$height = imagesy($image);

// Calculate the new dimensions of the image
$newWidth = 200;
$newHeight = $height * ($newWidth / $width);

// Create a new image with the new dimensions
$resizedImage = imagecreatetruecolor($newWidth, $newHeight);

// Copy and resample the original image into the new image
imagecopyresampled($resizedImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

// Compress and save the image
imagejpeg($resizedImage, &#39;compressed.jpg&#39;, 80);
?>

Kini, dengan menggunakan fungsi imagecopyresampled, saya boleh memampatkan imej JPEG, PNG dan WebP dengan mudah tanpa kegagalan pemampatan. Saya harap pengalaman saya dapat membantu pembangun web lain mengelak daripada menghadapi masalah yang sama dengan pemprosesan imej.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah kegagalan pemampatan imej php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn