Imagepng Problems
I wrote a small PHP script to help me to batch process images. It has worked for months without a glitch - until now. The script simply takes in an image and rotates it. The problem is with imagepng. When it tries to save I get a 255 error and nothing (or sometimes a little of the file) is put into the output file. I checked doing the same thing with several other programs (such as Photoshop, Visio, Canvas, Paint.NET, and Painter and none of them had a problem with the image. I switched out imagepng with imagegif and there were no problems saving the file either. So I'm suspecting a problem with imagepng. After this happened - imagepng will no longer work. I've even uninstalled and re-installed PHP and imagepng still will not work. I am using PHP v5.3.23. My system has 2GB of memory and is a Dell 6400. I amusing a 1TB disk drive with around 500GB free. The image is very large so I am going to put it onto my FTP server. You can get the image from there. Use the standard anonymous login with no password. Server's location is www.sim1.us.
I thought about it and decided to add one more thing: It isn't that imagepng won't work in the PHP script. It is that imagepng will not work period. Since I ran my program and tried to rotate this image imagepng just won't work. Even on simple things like a blank image I just get a 255 error. Even on a 10x10 image - I get the 255 error. So it isn't that it doesn't work in my program. It is like I broke something major in imagepng and now it won't do anything at all. So any ideas on what stupid thing I did would be helpful. :-)
Here is the program:
<?php # # Rot.php # A program to rotate images by Mark Manning # This program has been GNU'd and anyone can use it however # they would like. Please give credit if you use it for commercial # purposes. # $rot = 0; $dir = ""; $skip = 0; $odd = false; $even = false; foreach( $argv as $k=>$v ){ if( preg_match("/-o|-odd/i", $v) ){ $odd = true; } if( preg_match("/-e|-even/i", $v) ){ $even = true; } if( preg_match("/-s|-skip/i", $v) ){ $skip = $argv[$k+1]; } if( preg_match("/-r|-rot|-rotate/i", $v) ){ $rot = $argv[$k+1]; } if( preg_match("/-d|-dir|-directory/i", $v) ){ $dir = $argv[$k+1]; } } if( strlen($dir) < 1 ){ print "Please input the image diretory >"; $dir = trim( fgets(STDIN) ); if( strlen($dir) < 1 ){ die( "No directory given...aborting." ); } } if( abs($rot) == 0 ){ die( "No rotation given...aborting." ); } # # See how many files there are. # $dirs = array(); $files = array(); if( $dh = opendir($dir) ){ echo "Directory : $dir ...please wait.\n"; while( ($file = readdir($dh)) !== false ){ echo "Looking at : $file ...please wait.\n"; if( preg_match("/\.png$/i", $file) ){ $files[] = "$dir/$file"; } if( !preg_match("/^\./", $file) && is_dir("$dir/$file") ){ $dirs[] = "$dir/$file"; } } closedir( $dh ); } $num_files = count( $files ) - 1; $c = 0; foreach( $files as $k=>$v ){ echo "Working on file : $v ...please wait.\n"; if( ($skip > 0) && ($c >= $skip) ){ $c++; continue; } if( $odd && (($c % 2) < 1) ){ $c++; continue; } if( $even && (($c %2) > 0) ){ $c++; continue; } $size = getimagesize( $v ); $old = imagecreatefrompng( $v ); imagealphablending( $old, false ); imagesavealpha( $old, true ); $new = imagerotate( $old, $rot, imageColorAllocateAlpha($old, 0, 0, 0, 127)); imagealphablending( $new, false ); imagesavealpha( $new, true ); imagepng( $new, $v ); imagedestroy( $old ); imagedestroy( $new ); $c++; } ?>
Comments (2)
-
-
- changed status to on hold
On hold until smaller script and feedback provided
- Log in to comment
You may reach memory limit or the likes.
Please create a very simple script with only imagepng and imagecreatefrompng using a static file, run it in the CLI and you may see what actually goes wrong