Yeni bir değişkene bir GD başvuru Atama kopyalama başarısız

1 Cevap php

Bu yapmacık bir örnek, ama o zaman kod ben kullanıyorum çok daha özlü benim sorunum göstermektedir - ve ben bunu test ettik ve bu sorunu gösteriyor:

$image = imagecreatefromjpeg('test.jpg');    
$copy_of_image = $image;

// The important bit
imagedestroy($image);

header('Content-type: image/jpeg');
imagejpeg($copy_of_image);

Şimdi, benim beklenti $copy_of_image bu tam olduğunu, ama bu çalıştırdığınızda, her şeyin script URL'sini yazdırarak, başarısız olur. imagedestroy() dışında açıklama ve gayet güzel çalışıyor.

$ görselin var_dump sağlamaktadır:

resource(3) of type (gd) 

Peki neden ben bu kopyalamak? Görünüşe göre atama $copy_of_image = $image ziyade bir kopyasını bir başvuru yaratıyor - bunu önlemek için bir yol var?

1 Cevap

resource kendisi bir görüntü için bir reference olduğunu. Yani, kopyalamak veya başka bir değişkene referans atamak olsun, kaynağı yine aynı görüntüyü başvuruyor. Sadece aynı görüntüye noktası hem de iki başvuru yapıyoruz. Eğer görüntü yok ise (ki imagedestroy ne), görüntü artık mevcuttur ve buna işaret eden bir kaynak geçersiz hale gelir.

Sana imagecreatetruecolor ile yeni bir görüntü oluşturmak ve imagecopy kullanarak ikinci için ilk görüntünün içeriğini kopyalamak gerekir. Veya ilk etapta imagecreatefromjpeg ile iki ayrı kaynaklar ile iki ayrı görüntüler oluşturmak.