我想允许用户以各种格式(至少GIF,JPEG和PNG)上传头像类型的图像,但将其全部保存为PNG数据库BLOB.如果图像超大,像素化,我想在DB插入之前调整它们大小.
使用GD进行调整大小和PNG转换的最佳方式是什么?
编辑:可悲的是,只有GD可用在我需要使用的服务器上,没有ImageMagick.
<?PHP /* Resizes an image and converts it to PNG returning the PNG data as a string */ function imageToPng($srcFile,$maxSize = 100) { list($width_orig,$height_orig,$type) = getimagesize($srcFile); // Get the aspect ratio $ratio_orig = $width_orig / $height_orig; $width = $maxSize; $height = $maxSize; // resize to height (orig is portrait) if ($ratio_orig < 1) { $width = $height * $ratio_orig; } // resize to width (orig is landscape) else { $height = $width / $ratio_orig; } // Temporarily increase the memory limit to allow for larger images ini_set('memory_limit','32M'); switch ($type) { case IMAGETYPE_GIF: $image = imagecreatefromgif($srcFile); break; case IMAGETYPE_JPEG: $image = imagecreatefromjpeg($srcFile); break; case IMAGETYPE_PNG: $image = imagecreatefrompng($srcFile); break; default: throw new Exception('Unrecognized image type ' . $type); } // create a new blank image $newImage = imagecreatetruecolor($width,$height); // Copy the old image to the new image imagecopyresampled($newImage,$image,$width,$height,$width_orig,$height_orig); // Output to a temp file $destFile = tempnam(); imagepng($newImage,$destFile); // Free memory imagedestroy($newImage); if ( is_file($destFile) ) { $f = fopen($destFile,'rb'); $data = fread($f); fclose($f); // Remove the tempfile unlink($destFile); return $data; } throw new Exception('Image conversion Failed.'); }