В предыдущем посте я уже писал о том как можно изменить изображения сохранив его пропорции, но было несколько нюансов: можно было изменить только jpg картинку и хоть пропорции и сохранялись но миниатюры было не удобно делать т.к. формат миниатюры оставался тем же.
Дальше я расскажу как избежать все эти подводные камни и сделать хорошие миниатюры.Во первых я сразу буду использовать форму для загрузки картинки ( так проще тестировать скрипт ).
<form action="" method="post" name="img_folder_edit" enctype="multipart/form-data">
<input name="userfile" type="file" style="width: 200px;" >
<input type="submit" name="image_upload" value="UPLOAD" style="margin-left:20px;" >
</form>
<?php
if ($_POST['image_upload']){
$uploaddir = 'image/tmp_image/'; # Папка загрузки
$extentions = array('1','2','3','6'); # определяем типы разрешенных файлов
$userfilesize = $_FILES['file']['size'];
$maxfilesize = 1024*1024*7; # Максимальный размер файла в данный момент 7Мб
$width = 200; # Максимальная ширина миниатюры
$height = 160; # Максимальная высота миниатюры
$file_type = exif_imagetype($_FILES['userfile']['tmp_name']); # определяем тип файла
if (in_array($file_type, $extentions) && ($maxfilesize >= $userfilesize)){
switch ($file_type) {
case '2': $file_type = '.jpg'; break;
case '3': $file_type = '.png'; break;
case '1': $file_type = '.gif'; break;
case '6': $file_type = '.bmp'; break;
default: print 'Неизвестная ошибка в определении типа файла<br />';
}
$new_image = 'two'.$file_type;
$basename = 'one'.$file_type;
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$basename); #загружаем картинку
$ext = $file_type; # Получаем формат уменьшаемого изображения
list($width_orig, $height_orig) = getimagesize($uploaddir.$basename); # получаем размеры изображения
$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}
$image_p = imagecreatetruecolor($width, $height);
switch ($ext) {
case '.jpg': $source = imagecreatefromjpeg($uploaddir.$basename); break;
case '.gif': $source = imagecreatefromgif($uploaddir.$basename); break;
case '.png': $source = imagecreatefrompng($uploaddir.$basename); break;
case '.bmp': $source = imagecreatefromwbmp($uploaddir.$basename); break;
}
imagecopyresampled($image_p, $source, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
switch ($ext) {
case '.jpg': imagejpeg($image_p, $uploaddir.$new_image, 100); break;
case '.gif': imagegif($image_p, $uploaddir.$new_image); break;
case '.png': imagepng($image_p, $uploaddir.$new_image); break;
case '.bmp': imagewbmp($image_p, $uploaddir.$new_image); break;
}
# выводы текста
print 'Upload comlete <br />';
print $width_orig.'x'.$height_orig. '<br />';
print 'new size'.$width.'x'.$height.'<br />';
print '<img src="'.$uploaddir.$new_image.'"</a>';
# освобождаем память
imagedestroy($image_p);
imagedestroy($source);
} else {
print 'Размер файла слишком большой или файл имеет не поддерживаемое расщирение';
}
}
?>
Для начала мы задаем параметры для работы: папку загрузки, типы файлов (jpg, png, gif, bmp), определяем размер файла и максимальный разрешенный размер файла, а так же ширину и высоту (максимальную) миниатюры. Выходное изображение будет не больше 200×160 пикселей при этом сохранит формат (16:9, 16:10, 4:3 и т.д.) и не будет пиксилизированно!
Добавить комментарий