Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah imagecreatefrompng() Menghasilkan Latar Belakang Hitam Daripada Kawasan Lutsinar?

Mengapakah imagecreatefrompng() Menghasilkan Latar Belakang Hitam Daripada Kawasan Lutsinar?

Barbara Streisand
Barbara Streisandasal
2024-11-04 07:49:01385semak imbas

Why does imagecreatefrompng() Produce a Black Background Instead of a Transparent Area?

imagecreatefrompng() Menghasilkan Latar Belakang Hitam Daripada Kawasan Lutsinar?

Dalam PHP, fungsi imagecreatefrompng() biasanya digunakan untuk berfungsi dengan PNG imej. Walau bagaimanapun, telah diperhatikan bahawa apabila menggunakan fungsi ini, ketelusan PNG mungkin ditukar kepada warna hitam pejal.

Untuk menyelesaikan isu ini, langkah berikut boleh dilaksanakan selepas mencipta kanvas baharu menggunakan imagecreatetruecolor():

  1. Peruntukkan Warna Hitam: Berikan warna hitam kepada pembolehubah integer menggunakan fungsi imagecolorallocate().
  2. Alih keluar Hitam daripada Transparency: Gunakan fungsi imagecolortransparent() untuk menetapkan hitam sebagai warna lutsinar, dengan berkesan menjadikannya tidak kelihatan.
  3. Lumpuhkan Pengadunan Alpha: Gunakan imagealphablending() dengan nilai palsu untuk menghalang saluran alfa daripada digabungkan ke dalam warna imej.
  4. Dayakan Pemeliharaan Saluran Alpha: Gunakan imagesavealpha() dengan nilai sebenar untuk mengekalkan julat ketelusan penuh.

Oleh melaksanakan pengubahsuaian ini, maklumat saluran alfa dalam imej PNG akan dikekalkan, menghalang penukarannya kepada latar belakang hitam. Kod yang dikemas kini akan menyerupai yang berikut:

<code class="php"><?php

// ... Before imagecreatetruecolor()

$dimg = imagecreatetruecolor($width_new, $height_new); // png ?: gif

// start changes
switch ($stype) {

    case 'gif':
    case 'png':
        // integer representation of the color black (rgb: 0,0,0)
        $background = imagecolorallocate($dimg , 0, 0, 0);
        // removing the black from the placeholder
        imagecolortransparent($dimg, $background);

        // turning off alpha blending (to ensure alpha channel information
        // is preserved, rather than removed (blending with the rest of the
        // image in the form of black))
        imagealphablending($dimg, false);

        // turning on alpha channel information saving (to ensure the full range
        // of transparency is preserved)
        imagesavealpha($dimg, true);
        break;

    default:
        break;
}
// end changes

$wm = $w/$nw;
$hm = $h/$nh;

// ...</code>

Atas ialah kandungan terperinci Mengapakah imagecreatefrompng() Menghasilkan Latar Belakang Hitam Daripada Kawasan Lutsinar?. 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