PHP GD genererad bild Bilden kan inte visas eftersom den innehåller fel i Firefox

PHP GD genererad bild Bilden kan inte visas eftersom den innehåller fel i Firefox

När du skapar en bild med PHP, till exempel lägger till ett vattenstämpel på en serverlagrad bild, använder underkoden eller liknande en med JPEG istället för PNG, genereras kanske inte bilden alls och kasta ett fel som är direkt synligt på Firefox men inte på Chrome.

Denna typ av kod, trots att du arbetar på vissa servrar, kan nu fungera på andra, ibland av obskyra skäl. I mitt fall fungerade det helt fint lokalt, men producerat under fel på internet-servern, bilden kan inte visas eftersom den innehåller fel.

Frågan kan komma från flera anledningar, här är några av dem:

En utgång har redan ställts in tidigare.

Ett verkligt fel från bildgenerering.

Fel bildtyp används.

Bildbiblioteket är inte installerat.

$stamp = imagecreatefrompng('watermark.png');
if(!$im = imagecreatefrompng('image.png')) die('Error generating image');
$marge_right = $marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

$copyimage = imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
if(!imagedestroy($im)) die('Error generating image');
if(!imagedestroy($stamp)) die('Error generating image');

En utgång har redan ställts in tidigare

Även om det inte är avsiktligt, kan det exempelvis vara så att andra tidigare skript innehåller utrymmen i slutet - för att undvika detta fel, se till att PHP, som PHP rekommenderar, inte stänger skript med PHP-endemärke?

Sedan, innan du använder huvudfunktionen, använd följande kod för att se till att alla tidigare inställda rubriker kasseras

foreach (getallheaders() as $name => $value) {
header_remove($name);
}

Och även denna funktion för att säkerställa att ingen utmatning har genererats före rubriken och bilden

ob_end_clean();

Detta löste problemet i mitt fall, och bilden visades korrekt igen.

Ett verkligt fel från bildgenerering

Om ett verkligt fel slöts under bildgenerering, se till att PHP är inställt på att visa alla möjliga typer av fel och kontrollera motsvarande loggar, för att kunna spåra det och lösa det.

Följande kod kommer att göra PHP rapporterar alla fel i loggen:

error_reporting(E_ALL);
ini_set('display_errors', '1');

Du kan då få reda på att vissa fel rapporterades, även om de inte kom fram i utdatahtml på grund av serverkonfiguration.

Fel bildtyp används

Se till att de bildtyper du använder är korrekta, till exempel med den här koden för att skilja mellan png och jpeg.

Se också till att rubriken är korrekt beroende på vilken produkt som används, beroende på vilken bildgenereringsfunktion som används

//to generate png image
header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
//to generate jpeg image
header('Content-type: image/jpeg');
if(!imagejpeg($im)) die('Error generating image');

Bildbiblioteket är inte installerat

För att se till att bildbiblioteken är installerade. För att göra det, kör funktionen phpinfo (); i ett skript och kontrollera utmatningen för följande värde relaterat till PHP GD, grafikbiblioteket som används av funktioner som imagepng ();

Om det saknas paket beror sättet att lösa det på din lokala konfiguration, antingen genom att lägga till paketet med PEAR-kommandon eller använda webbhotell som är inbyggd lösning för paketinstallation.

Vad gör man när imagejpeg eller imagepng inte fungerar

I NotePad ++, öppna PHP-filen som kallar ImagePng-funktionen och spara den efter att ha gått till menyn Kodning> Konvertera till UTF-8 utan BOM.

I DreamWeaver, gå till Sidegenskaper> Titel / Kodning> avmarkera Inkluder Unicode Signature (BOM).

När PHP imagejpeg eller imagepng inte fungerar beror det troligtvis på att PHP-filen har kodats med en BOM, en Bill of Material, och därför skickas ytterligare information med bilden innan bilddata.

Funktionerna för PHP imagejpeg och PHP imagepng är funktionen som används för att skicka en bildkod direkt i serverns svar.

PHP - imagepng fungerar inte korrekt
PHP - imagepng-funktionen
PHP - imagejpeg funktion

Liknande artiklar

kommentarer (6)

Irvin Vasquez, 2018-08-19
Simple, clear and well explained, many thanks
Joyce Lawrence, 2018-08-19
ありがとう、非常に有益な
Catherine Roberts, 2018-08-19
Dokładnie tego, czego szukałem, idealnie
Headlinext, 2018-08-19
जानकारी का महान टुकड़ा, साझा करने के लिए धन्यवाद
Marshel, 2018-08-19
विश्वास नहीं कर सकता कि मुझे अंत में समाधान मिला, यह लंबे समय तक एक दुःस्वप्न था, अब हल हो गया
porcateraC, 2018-08-19
بالضبط ما كنت أبحث عنه ، مثالي

Lämna en kommentar