Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah saya boleh mengoptimumkan pemangkasan imej dalam PHP untuk imej besar sambil mengekalkan nisbah bidang?

Bagaimanakah saya boleh mengoptimumkan pemangkasan imej dalam PHP untuk imej besar sambil mengekalkan nisbah bidang?

Linda Hamilton
Linda Hamiltonasal
2024-11-03 17:25:30813semak imbas

How can I optimize image cropping in PHP for large images while preserving the aspect ratio?

Pemotongan Imej dalam PHP: Pengoptimuman untuk Imej Besar dan Pemeliharaan Nisbah Aspek

Coretan kod yang disediakan memangkas imej dengan berkesan, tetapi hasilnya mungkin merosot apabila digunakan pada imej yang lebih besar. Untuk menangani isu ini, kami akan meneroka pendekatan alternatif yang melibatkan saiz semula imej asal sebelum memangkas untuk mencapai hasil yang konsisten dan optimum.

Mengubah Saiz untuk Pemeliharaan Nisbah Aspek

Sebelum ini memangkas imej, adalah penting untuk mengekalkan nisbah bidangnya untuk mengelakkan herotan. Nisbah aspek ialah perkadaran lebar imej dengan ketinggiannya. Dengan mengubah saiz imej supaya bahagian yang lebih kecil sepadan dengan dimensi pemangkasan yang diingini, kami boleh mengekalkan nisbah aspek asal.

Pelaksanaan Kod

Untuk melaksanakan pensaiz semula dan pemangkasan imej, kami akan mengubah suai bahagian berikut bagi kod yang disediakan:

<code class="php">$image = imagecreatefromjpeg($_GET['src']);
$filename = 'images/cropped_whatever.jpg';

$thumb_width = 200;
$thumb_height = 150;

$width = imagesx($image);
$height = imagesy($image);

$original_aspect = $width / $height;
$thumb_aspect = $thumb_width / $thumb_height;

if ( $original_aspect >= $thumb_aspect )
{
   // If image is wider than thumbnail (in aspect ratio sense)
   $new_height = $thumb_height;
   $new_width = $width / ($height / $thumb_height);
}
else
{
   // If the thumbnail is wider than the image
   $new_width = $thumb_width;
   $new_height = $height / ($width / $thumb_width);
}

$thumb = imagecreatetruecolor( $thumb_width, $thumb_height );

// Resize and crop
imagecopyresampled($thumb,
                   $image,
                   0 - ($new_width - $thumb_width) / 2, // Center the image horizontally
                   0 - ($new_height - $thumb_height) / 2, // Center the image vertically
                   0, 0,
                   $new_width, $new_height,
                   $width, $height);
imagejpeg($thumb, $filename, 80);</code>

Penjelasan

  1. Kami mengira nisbah aspek asal (aspek_asli) dan nisbah aspek sasaran (aspek_gambar kecil) untuk menentukan dimensi baharu imej.
  2. Kami menyemak sama ada imej asal lebih lebar daripada lakaran kecil dari segi nisbah bidang.
  3. Jika imej asal lebih lebar, kami tetapkan ketinggian baharu untuk memadankan ketinggian lakaran kecil dan mengira lebar baharu secara berkadar.
  4. Jika lakaran kecil lebih lebar, kami menetapkan lebar baharu agar sepadan dengan lebar lakaran kecil dan mengira ketinggian baharu secara berkadar.
  5. Kami mencipta imej baharu ($ibu jari) dengan dimensi lakaran kecil yang diingini.
  6. Kami menggunakan imagecopyresampled() untuk mengubah saiz dan memangkas imej asal ke dalam lakaran kecil baharu, mengekalkan nisbah bidang.
  7. Akhir sekali , kami menyimpan lakaran kecil yang dipangkas ke fail yang ditentukan.

Dengan mengikuti pendekatan ini, kami boleh memangkas imej yang lebih besar dengan berkesan dan mengekalkan nisbah bidang, memberikan hasil yang konsisten dan berkualiti tinggi.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengoptimumkan pemangkasan imej dalam PHP untuk imej besar sambil mengekalkan nisbah bidang?. 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