Я создаю thumnails загруженного файла.
если ширина и высота изображения больше 200, чем тогда, я их размер до 200 пикселей.
Вот код, который я использовал для этого:
if (file_exists($old_file)) { $path_parts = pathinfo($old_file); $extension = $path_parts['extension']; $filename_path = $filepath . $filename; $destination_path = $filename_path; if (strtolower($extension) == "jpg" || strtolower($extension) == "jpeg") { $uploadedfile = $old_file; $src = imagecreatefromjpeg($uploadedfile); } else if (strtolower($extension) == "png") { $uploadedfile = $old_file; $src = imagecreatefrompng($uploadedfile); } else { $uploadedfile = $old_file; $src = imagecreatefromgif($uploadedfile); } list($width, $height) = getimagesize($uploadedfile); $newwidth = $Size['width']; $newheight = $Size['height']; if ($width <= $newwidth && $height <= $newheight) { $newwidth = $width; $newheight = $height; $tmp = imagecreatetruecolor($width, $height); } else { if ($width > $height) { $newheight = ($height / $width) * $newwidth; $tmp = imagecreatetruecolor($newwidth, $newheight); } else { $newwidth = ($width / $height) * $newheight; $tmp = imagecreatetruecolor($newwidth, $newheight); } } if ((strtolower($extension) == "png") OR (strtolower($extension) == "gif")) { imagealphablending($tmp, false); imagesavealpha($tmp, true); $transparent = imagecolorallocatealpha($tmp, 255, 255, 255, 127); imagefilledrectangle($tmp, 0, 0, $newwidth, $newheight, $transparent); } imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); if (strtolower($extension) == "jpg" || strtolower($extension) == "jpeg") { imagejpeg($tmp, $destination_path, 100); } elseif (strtolower($extension) == "png") { imagepng($tmp, $destination_path, 5); } else { imagegif($tmp, $destination_path); } chmod($destination_path, 0777); imagedestroy($src); imagedestroy($tmp); ob_flush(); flush(); ob_end_flush(); return true; } else { return false; }
он изменяет размер больших изображений на 200 пикселей на 200 пикселей, но размер изображения увеличивается (увеличивается байт и kb и т. д.).
Я попытался загрузить файл 8kb png, а размер нового файла миниатюр был 28kb?
Пробовал поиск по Google, но не нашел ничего полезного
Благодарю.
Ваше исходное изображение сжато, после его разбора вы получаете истинное цветное изображение, которое несжато. Затем вы сохраняете его с уровнем сжатия 5 (в случае PNG), что довольно низкое сжатие, таким образом, более высокий размер файла.
Попробуйте более высокое сжатие, например 9. Также попробуйте добавить комбинацию фильтров для уменьшения размера файла ( http://us3.php.net/manual/en/image.constants.php ищите PNG_FILTER_*
).
См .: http://us3.php.net/manual/en/function.imagepng.php
http://en.wikipedia.org/wiki/Portable_Network_Graphics#Compression http://en.wikipedia.org/wiki/Portable_Network_Graphics#File_size_factors
Библиотека GD, похоже, не предоставляет каких-либо интерфейсов, позволяющих вам вводить низкоуровневые данные PNG, но вы можете теоретически узнать уровень сжатия и фильтры исходного кода, используя другие привязки или пытаясь прочитать его вручную.
http://www.libpng.org/pub/png/spec/1.2/PNG-Compression.html http://www.libpng.org/pub/png/spec/1.2/PNG-Filters.html
То же самое может произойти с JPG и GIF.