php - Why won't GIF files stay animated? -
this script uploads image, watermarks it, , creates thumbnail of image. i've edited ignore watermarking of gif files since gd library breaks animation when watermarked. it watermarks appropriate image types fine, when gif uploaded, doesn't stay animated though it's not watermarked. here's full code:
<?php if(isset($_post)) { $big = 980 $small = 400; $thumbprefix = "thumb_"; $destinationdirectory = '../folder/'; $quality = 100; if (!isset($_server['http_x_requested_with'])){ die(); } if(!isset($_files['imagefile']) || !is_uploaded_file($_files['imagefile']['tmp_name'])) { die('error!'); } $number = substr(str_shuffle(md5(microtime())), 0, 10); $imagename = str_replace(' ','-',strtolower($_files['imagefile']['name'])); $imagesize = $_files['imagefile']['size']; $tempsrc = $_files['imagefile']['tmp_name']; $imagetype = $_files['imagefile']['type']; switch(strtolower($imagetype)) { case 'image/png': $createdimage = imagecreatefrompng($_files['imagefile']['tmp_name']); break; case 'image/gif': $createdimage = imagecreatefromgif($_files['imagefile']['tmp_name']); break; case 'image/jpeg': case 'image/pjpeg': $createdimage = imagecreatefromjpeg($_files['imagefile']['tmp_name']); break; default: die('unsupported file!'); } list($curwidth,$curheight)=getimagesize($tempsrc); $imageext = substr($imagename, strrpos($imagename, '.')); $imageext = str_replace('.','',$imageext); $imagename = preg_replace("/\\.[^.\\s]{3,4}$/", "", $imagename); $newname = $number.'-'.$imagename.'.'.$imageext; $url = 'http://'.@$_server['http_host'].strtr(dirname(dirname($_server['script_name'])), '\\', '/').''; $thumb_imagename = $destinationdirectory.$thumbprefix.$newname; $imagename = $destinationdirectory.$newname; if(resizeimage2($curwidth,$curheight,$small,$thumb_imagename,$createdimage,$quality,$imagetype)) { if(!resizeimage($curwidth,$curheight,$mainimagesize,$imagename,$createdimage,$quality,$imagetype)) { echo 'error'; } $variable = <<<img <p>image preview</p></br> <div class="up"> <img src="$url/folder/$newname"> <label onclick="document.getelementbyid('content').value = '$url/folder/$thumbprefix$newname';document.getelementbyid('extra').value = '$url/folder/$newname';document.getelementbyid('imgprev').src = '$url/folder/$thumbprefix$newname';" class="img-submit" for="upload"></label> </div> img; echo $variable; }else{ die('error'); } } function resizeimage($curwidth,$curheight,$maxsize,$destfolder,$srcimage,$quality,$imagetype) { //check image size not 0 if($curwidth <= 0 || $curheight <= 0) { return false; } $newcanves = imagecreatetruecolor($curwidth, $curheight); $watermark = 'watermark/watermark.png'; if(imagecopyresampled($newcanves, $srcimage,0, 0, 0, 0, $curwidth, $curheight, $curwidth, $curheight)) { switch(strtolower($imagetype)) { case 'image/png': imagepng($newcanves,$destfolder); break; case 'image/gif': imagegif($newcanves,$destfolder); break; case 'image/jpeg': case 'image/pjpeg': imagejpeg($newcanves,$destfolder,$quality); break; default: return false; } if (($imagetype =="image/pjpeg" or $imagetype =="image/jpeg" or $imagetype =="image/jpg")) { $watermark = imagecreatefrompng($watermark); $watermark_width = imagesx($watermark); $watermark_height = imagesy($watermark); $watermark_x = ($curwidth-$watermark_width); $watermark_y = ($curheight-$watermark_height)/2; imagecopy($newcanves, $watermark, $watermark_x, $watermark_y, 0, 0, $watermark_width, $watermark_height); } imagejpeg($newcanves,$destfolder,$quality); if(is_resource($newcanves)) {imagedestroy($newcanves);} return true; } } function resizeimage2($curwidth,$curheight,$maxsize,$destfolder,$srcimage,$quality,$imagetype) { if($curwidth <= 0 || $curheight <= 0) { return false; } //construct proportional size of new image $imagescale = min($maxsize/$curwidth, $maxsize/$curwidth); $width = ceil($imagescale*$curwidth); $height = ceil($imagescale*$curheight); $newcanves = imagecreatetruecolor($width, $height); $watermark = 'watermark/watermark.png'; if(imagecopyresampled($newcanves, $srcimage,0, 0, 0, 0, $width, $height, $curwidth, $curheight)) { switch(strtolower($imagetype)) { case 'image/png': imagepng($newcanves,$destfolder); break; case 'image/gif': imagegif($newcanves,$destfolder); break; case 'image/jpeg': case 'image/pjpeg': imagejpeg($newcanves,$destfolder,$quality); break; default: return false; } imagejpeg($newcanves,$destfolder,$quality); if(is_resource($newcanves)) {imagedestroy($newcanves);} return true; } } i noticed if use:
if(!move_uploaded_file($_files['imagefile']['tmp_name'], $destinationdirectory.$newimagename )) instead of:
if(!resizeimage($curwidth,$curheight,$mainimagesize,$destrandimagename,$createdimage,$quality,$imagetype)) then gifs stay animated, doesn't watermark anymore. i'm throughly confused. knowledge of php limited. have ideas? thanks.
you should not convert gif image jpg or png type if want gif image animate
Comments
Post a Comment