How to find out what the error is when Firefox says: "The image cannot be displayed because it contains errors"

I have a PHP file that creates an image. I have PHP configured to report errors on the screen. When I run the file in a php file in Firefox 23, it returns the Image cannot be displayed because it contains errors .

How to find out which specific error is to blame for the image?

Additional Information Here is the code

 <?php $tfont[] = 'cylburn-webfont.ttf'; $cryptinstall="./cryptographp.fct.php"; include $cryptinstall; error_reporting(E_ALL ^ E_NOTICE); srand((double)microtime()*1000000); if ($_GET[$_GET['sn']]=="") unset ($_GET['sn']); session_start(); include('getcaptcha.php'); $question = getcaptcha(); $questionLen = strlen($question); $cryptwidth = 25 * $questionLen; $cryptinstall2="./cryptographp.cfg.php"; include $cryptinstall; $cryptwidth=900; $cryptheight=200; // CrÈation du cryptogramme temporaire $imgtmp = imagecreatetruecolor($cryptwidth,$cryptheight); $blank = imagecolorallocate($imgtmp,255,255,255); $black = imagecolorallocate($imgtmp,0,0,0); imagefill($imgtmp,0,0,$blank); $word =''; $x = 10; $pair = rand(0,1); $charnb = rand($charnbmin,$charnbmax); for ($i=0;$i<= $questionLen;$i++) { $tword[$i]['font'] = $tfont[array_rand($tfont,1)]; $tword[$i]['angle'] = (rand(1,2)==1)?rand(0,$charanglemax):rand(360-$charanglemax,360); $tword[$i]['element'] = str_split($question)[$i-1]; $tword[$i]['size'] = rand($charsizemin,$charsizemax); $tword[$i]['y'] = ($charup?($cryptheight/2)+rand(0,($cryptheight/5)):($cryptheight/1.5)); $word .=$tword[$i]['element']; $lafont="fonts/".$tword[$i]['font']; imagettftext($imgtmp,$tword[$i]['size'],$tword[$i]['angle'],$x,$tword[$i]['y'],$black,$lafont,$tword[$i]['element']); $x +=$charspace; } // Calculate horizontal racadrage temporary cryptogram $xbegin=0; $x=0; while (($x<$cryptwidth)and(!$xbegin)) { $y=0; while (($y<$cryptheight)and(!$xbegin)) { if (imagecolorat($imgtmp,$x,$y) != $blank) $xbegin = $x; $y++; } $x++; } $xend=0; $x=$cryptwidth-1; while (($x>0)and(!$xend)) { $y=0; while (($y<$cryptheight)and(!$xend)) { if (imagecolorat($imgtmp,$x,$y) != $blank) $xend = $x; $y++; } $x--; } $xvariation = round(($cryptwidth/2)-(($xend-$xbegin)/2)); imagedestroy ($imgtmp); // Create the final cryptogram // Create the background $img = imagecreatetruecolor($cryptwidth,$cryptheight); if ($bgimg and is_dir($bgimg)) { $dh = opendir($bgimg); while (false !== ($filename = readdir($dh))) if(eregi(".[gif|jpg|png]$", $filename)) $files[] = $filename; closedir($dh); $bgimg = $bgimg.'/'.$files[array_rand($files,1)]; } if ($bgimg) { list($getwidth, $getheight, $gettype, $getattr) = getimagesize($bgimg); $imgread = imagecreatefrompng($bgimg); break; imagecopyresized ($img, $imgread, 0,0,0,0,$cryptwidth,$cryptheight,$getwidth,$getheight); imagedestroy ($imgread); } else { $bg = imagecolorallocate($img,$bgR,$bgG,$bgB); imagefill($img,0,0,$bg); if ($bgclear) imagecolortransparent($img,$bg); } function ecriture() { // CrÈation de l'Ècriture global $img, $ink, $charR, $charG, $charB, $charclear, $xvariation, $charnb, $charcolorrnd, $charcolorrndlevel, $tword, $charspace; $ink = imagecolorallocatealpha($img,$charR,$charG,$charB,$charclear); global $question; global $questionLen; $x = $xvariation; for ($i=1;$i<$questionLen;$i++) { if ($charcolorrnd){ // Choisit des couleurs au hasard $ok = false; do { $rndcolor = 0; switch ($charcolorrndlevel) { case 1 : if ($rndcolor<200) $ok=true; break; // tres sombre default : $ok=true; } } while (!$ok); $rndink = imagecolorallocatealpha($img,$rndR,$rndG,$rndB,$charclear); } $lafont="fonts/".$tword[$i]['font']; imagettftext($img,$tword[$i]['size'],$tword[$i]['angle'],$x,$tword[$i]['y'],$charcolorrnd?$rndink:$ink,$lafont,$tword[$i]['element']); $x +=$charspace; } } function noisecolor() // Fonction permettant de dÈterminer la couleur du bruit et la forme du pinceau { global $img, $noisecolorchar, $ink, $bg, $brushsize; switch ($noisecolorchar) { case 1 : $noisecol=$ink; break; case 2 : $noisecol=$bg; break; case 3 : default : $noisecol=imagecolorallocate ($img,0,0,0); break; } if ($brushsize and $brushsize>1 and function_exists('imagesetbrush')) { $brush = imagecreatetruecolor($brushsize,$brushsize); imagefill($brush,0,0,$noisecol); imagesetbrush($img,$brush); $noisecol=IMG_COLOR_BRUSHED; } return $noisecol; } function bruit() //Adding noise: points, lines and circles random { global $noisepxmin, $noisepxmax, $noiselinemin, $noiselinemax, $nbcirclemin, $nbcirclemax,$img, $cryptwidth, $cryptheight; $nbpx = rand($noisepxmin,$noisepxmax); $nbline = rand($noiselinemin,$noiselinemax); for ($i=1;$i<$nbpx;$i++) imagesetpixel ($img,rand(0,$cryptwidth-1),rand(0,$cryptheight-1),noisecolor()); for ($i=1;$i<=$nbline;$i++) imageline($img,rand(0,$cryptwidth-1),rand(0,$cryptheight-1),rand(0,$cryptwidth-1),rand(0,$cryptheight-1),noisecolor()); } if ($noiseup) { ecriture(); bruit(); } else { bruit(); ecriture(); } // Create the frame if ($bgframe) { $framecol = imagecolorallocate($img,($bgR*3+$charR)/4,($bgG*3+$charG)/4,($bgB*3+$charB)/4); imagerectangle($img,0,0,$cryptwidth-1,$cryptheight-1,$framecol); } // Transformations supplÈmentaires: Grayscale et Brouillage // VÈrifie si la fonction existe dans la version PHP installÈe if ($cryptgrayscal) imagefilter ( $img,IMG_FILTER_GRAYSCALE); if ($cryptgaussianblur) imagefilter ( $img,IMG_FILTER_GAUSSIAN_BLUR); /* if i comment out these lines, then the file runs fine, but of course does not return an image header("Content-type: image/png"); //this is the only header(...) that is included in the file. I am requesting the file directly with the URL. imagepng($img); imagedestroy ($img); unset ($word,$tword); unset ($_SESSION['cryptreload']); */ ?> 

If I comment on header("content-type: image/png") , it will get rid of the error, but will return stupidity to the browser, which looks like this:

enter image description here

(All of this suggests that I am less interested in fixing this image file than in understanding how to go about debugging errors / unexpected behavior in image creation files. I want to learn how to fix problematic image generating files on my own .)

+4
source share
5 answers

Comment on header() so that it just sends back the data, not image/png .

0
source

Read your PHP error log and you will find out the exact error. Most likely, PHP throws a warning that the reason you see this error in your browser.

0
source

Maybe your php script messed up your images. Unable to report logical errors, you must find them yourself. To enable regular error reporting, check out this link: How do I enable error reporting in PHP?

To enable error logging Where does PHP store error logs? (php5, apache, fastcgi, cpanel)

0
source

This is a trick, isn't it?

Your script contains a line

 echo('here!'); //prints here to the screen 

This will add the ASCII string “here” to the PNG data stream, thereby destroying the image.

Hint. If you upload the result of your script (using, for example, wget or just “Save Page” in Firefox) and open the file in an editor, you will quickly see the problem.

0
source

In the ASP.Net CORE application, you may want to put the image files in a folder named Images according to the solution, but you need to put them in the wwwroot / images folder:

enter image description here

0
source

Source: https://habr.com/ru/post/1500113/


All Articles