Kezdőoldal » Számítástechnika » Weblapkészítés » PNG és GIF képnél miért nem...

PNG és GIF képnél miért nem marad meg az átlátszó háttér?

Figyelt kérdés

Sziasztok!


Egy általam írt program modul, melynek célja a képtípusát felismeri, majd egy előre megadott érték alapján arányosan méretezi és menti.

De a problémám a következő vele.

PNG és gif képeknél ahol nincs háttér fogja és fekete hátteret fest neki ahol átlátszónak kellene lennie mentés és méretezés után.


De miért?


Íme a kód.:


<?php


function meretezes($szelesseg,$magassag,$kep_eleres){


$filename = $kep_eleres;

list($width, $height) = @getimagesize($filename);



//$szelesseg=640;

//$magassag=480;

$kep_meret=@getimagesize($filename);

while($kep_meret[0] > $szelesseg OR $kep_meret[1] > $magassag){

$kep_meret[0]=($kep_meret[0] * 0.99);

$kep_meret[1]=($kep_meret[1] * 0.99);

}

$newwidth=ceil($kep_meret[0]);

$newheight=ceil($kep_meret[1]);



$image_p = @imagecreatetruecolor($newwidth, $newheight);

$kit0=explode(".",$filename);

switch (strtolower($kit0[count($kit0)-1]))

{

case 'gif':

$image = imagecreatefromgif($filename);

// print("gif");

break;

case 'jpg':

//print("jpg<br/>");

$image = @imagecreatefromjpeg($filename);

break;

case 'jpeg':

//print("jpeg<br/>");

$image = imagecreatefromjpeg($filename);

break;

case 'png':

// print("png<br/>");

$image = imagecreatefrompng($filename);

break;

}

/* print_r($image);

print("<br/>".$newwidth);

print("<br/>".$newheight);

print("<br/>".$width);

print("<br/>".$height); */

@imagecopyresampled($image_p, $image, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

switch (strtolower($kit0[count($kit0)-1]))

{

case 'gif':

@imagegif($image_p,$filename);

break;

case 'jpg':

@imagejpeg($image_p,$filename);

break;

case 'jpeg':

imagejpeg($image_p,$filename);

break;

case 'png':

@imagepng($image_p,$filename);

break;

}

}


?>



#php #méretezés #imagecreatefromjpeg #imagecreatefrompng #imagecreatefromgif #arányos képméretezés phpval
2014. máj. 30. 13:12
 1/10 anonim ***** válasza:
Alapvetően fingom sincs a programozásról, de ez talán segít: a képszerkesztő progik közül az tud átlátszóan maradóan méretezni, ami kezeli a képekben az alfa-csatornát, mert ez tartalmazza az átlátszóságot. Ha a képszerkesztó progi butább, akkor is leméretezi, de eltűnik az átlátszóság.
2014. máj. 30. 14:47
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:
Egyetértek az első hozzászólóval. Nyisd meg photoshoppban, és be tudod állítani a backgroundot transparencyre
2014. máj. 30. 18:28
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:

Istenem, az előző válaszolók egyszerűen túl hülyék ahhoz, hogy valódiak legyenek.

Legelső találat:

mivel egy képen teljes fekete szinte sosincs, ha pl. fotóról van szó, ezért [link] -itt a blacket állítsd át transparentre, miután legenerálta.

2014. máj. 30. 19:35
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:

Vagy:

[link]

2014. máj. 30. 19:36
Hasznos számodra ez a válasz?
 5/10 anonim ***** válasza:

[link]

Első a $filename, második, a TRUE legyen.

2014. máj. 30. 19:36
Hasznos számodra ez a válasz?
 6/10 Drone007 ***** válasza:

Célszerű a mime típust is ellenőrizni, nem csak a kiterjesztést.


Még az imagecopyresampled előtt gif és png képek esetén add ki a következő parancsokat, hogy megtartsd az átlátszóságot:


imagecolortransparent($image_p, imagecolorallocatealpha($image_p, 0, 0, 0, 127));

imagealphablending($image_p, false);

imagesavealpha($image_p, true);


Viszont a gif képnél figyelj, mert az nem lehet truecolor, ahhoz a célkép előállításához az imagecreate() functiont használd!


Jó ha utánanézel a fenti parancsoknak, elég trükkösek.


Sok sikert!

2014. máj. 31. 09:35
Hasznos számodra ez a válasz?
 7/10 A kérdező kommentje:

Köszönöm szépen a segítségeteket!

Lesz miből táplálkozni legalább!

Ha elakadok úgy is kérdezek :)

2014. máj. 31. 11:23
 8/10 anonim ***** válasza:
Eléggé régóta használok gif és png fájlokat, de valahogy mindig sikerült megoldanom mindenféle típusellenőrzés meg anyámkínja nélkül. Ez hogyan lehetséges?
2014. máj. 31. 13:50
Hasznos számodra ez a válasz?
 9/10 Drone007 ***** válasza:

Egyrészt a kép (fájl) feltöltésekor a $_FILES global-ba bekerül a fájl típusa ($_FILES['fileid']['type']), amit ellenőrizhetsz.

[link]

Másrészt a getimagesize függvény is lekéri a kép típusát (2 index a visszaadott tömbben).

[link]


Ezek megbízhatóbban adják vissza a kép tipusát, mint a kiterjesztés string-vizsgálata. Annál is inkább, mivel többnyire a jpg lehet jpeg kiterjesztésű is.

2014. máj. 31. 14:07
Hasznos számodra ez a válasz?
 10/10 A kérdező kommentje:

Nagyon szépen köszönöm a segítségeteket!


Sikerült megoldanom! Mind a PNG re mint a GIF re is! :)

Átméretezés után is megmaradt az áttetszőség.



// új kép legenerálása

$ujkep = imagecreatetruecolor ($new_width, $new_height);


// Kép generálása

switch ($type) // A kép formátumától függően más-más függvénnyel dolgozzuk fel a képet

{

case 1:

$kep = imagecreatefromgif ($kepfajl);

imagecolortransparent($ujkep, imagecolorallocatealpha($ujkep, 0, 0, 0, 127));

imagealphablending($ujkep, false);

imagesavealpha($ujkep, true);

break;

case 2:

$kep = imagecreatefromjpeg ($kepfajl);

break;

case 3:

$kep = imagecreatefrompng ($kepfajl);

imagealphablending($ujkep, false);

imagesavealpha($ujkep, true);

$transparent = imagecolorallocatealpha($ujkep, 255, 255, 255, 127);

imagefilledrectangle($ujkep, 0, 0, $new_width, $new_height, $transparent);

break;

}


imagecopyresampled ($ujkep, $kep, 0, 0, 0, 0, $new_width, $new_height, $width, $height); // A lényeg - most generáljuk az új képet


// Kép generálása

switch ($type) // A kép formátumától függően más-más függvénnyel dolgozzuk fel a képet

{

case 1:

imagegif($ujkep, $kepfajl, 100);

imagedestroy($ujkep);

break;

case 2:

imagejpeg($ujkep, $kepfajl, 100);

imagedestroy($ujkep);

break;

case 3:

imagepng($ujkep, $kepfajl, 9);

imagedestroy($ujkep);

break;

}

2014. jún. 2. 01:15

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!