2011-09-30 17 views
6

Mam wiele obrazów JPEG, które chcę przekonwertować na obrazy PNG za pomocą PHP. Pliki JPEG zostaną przesłane przez klientów, więc nie mogę im ufać, aby upewnić się, że są w odpowiednim formacie.Użyj PHP, aby przekonwertować JPEG na przezroczysty PNG

Chcę również, aby ich białe tło było przezroczyste.

Czy PHP ma jakieś funkcje, których mogę użyć, aby to osiągnąć?

Odpowiedz

8

Po kilku dniach próbuje różnych rozwiązań i robi trochę więcej badań, to co znalazłem pracował dla mnie .

$image = imagecreatefromjpeg('image.jpg'); 
imagealphablending($image, true); 
$transparentcolour = imagecolorallocate($image, 255,255,255); 
imagecolortransparent($image, $transparentcolour) 

Ważna jest nazwa imagealphablending($image, true);.

Korzystanie imagesavealpha($f, true); jak wspomniano w poprzedniej odpowiedzi na pewno nie działa i wydaje się faktycznie uniemożliwić podejmowania tła przezroczysty ...

Aby odtwarzać obraz przezroczysty z odpowiednimi nagłówkami.

<?php 
    header('Content-Type: image/png'); 
    imagepng($image, null, 1); 
?> 
6
$f = imagecreatefromjpeg('path.jpg'); 
$white = imagecolorallocate($f, 255,255,255); 
imagecolortransparent($f, $white); 

Więcej szczegółów here

+6

Zakładając, że to zadziała, że ​​umysł JPG to stratny Format. Oznacza to, że kolory mogą być trochę zbyt małe, szczególnie wokół krawędzi iw miejscach, w których kolor zmienia się z białego na inny. Szukając zwykłego białego, prawdopodobnie nie znajdziesz wszystkich pikseli, które chcesz przeźroczystości. – GolezTrol

+1

Aby ukończyć tę odpowiedź: użyj 'imagesavealpha ($ f, true);' aby upewnić się, że kanał alfa jest zapisany i 'imagepng ($ f, '/path /to/save/file.png');', aby zapisać jako PNG. – megaflop

+0

Więcej szczegółów [tutaj] (http://www.php.net/manual/en/ref.image.php). – awm

-3

Znalazłem rozwiązanie na Convert jpg image to gif, png & bmp format using PHP

$imageObject = imagecreatefromjpeg($imageFile); 
imagegif($imageObject, $imageFile . '.gif'); 
imagepng($imageObject, $imageFile . '.png'); 
imagewbmp($imageObject, $imageFile . '.bmp'); 
+0

Nie odpowiedziałeś na pytanie dotyczące przezroczystości. – megaflop

0

Ten pracował dla mnie:

$image = imagecreatefromjpeg("image.jpg"); 
imagealphablending($image, true); 
imagepng($image, "image.png"); 
Powiązane problemy