|
|
|
| Добрый день.
Сделал на сайте в профилях пользователей возможность добавлять аватарки, размером 70 на 70 пикселей. Столкнулся с проблемой, загружают изображения какого попало размера. Как сделать так, чтобы при загрузки изображения любого размера вырезалась его центральная часть размером 70 на 70? | |
|
|
|
|
|
|
|
для: maximum7
(29.07.2009 в 21:48)
| | думаю, это неудачная идея.
почему только центр и только 70х70?
создайте миниатюру 70х70.
здесь есть пример.
также по форуму их полно. почитайте, будет полезно.
а если уж что-то не получится, тогда обращайтесь | |
|
|
|
|
|
|
|
для: ride
(29.07.2009 в 21:55)
| | нашёл как сделать
function imageresize($outfile,$infile,$neww,$newh,$quality) {
$im=imagecreatefromjpeg($infile);
$im1=imagecreatetruecolor($neww,$newh);
imagecopyresampled($im1,$im,0,0,0,0,$neww,$newh,imagesx($im),imagesy($im));
imagejpeg($im1,$outfile,$quality);
imagedestroy($im);
imagedestroy($im1);
}
|
если изображение jpg всё норм, но что если загружают gif? | |
|
|
|
|
|
|
|
для: maximum7
(29.07.2009 в 22:27)
| | imagecreatefromgif() вместо imagecreatefromjpeg(),
imagegif() вместо imagejpeg()
точно также и для *.png: imagecreatefrompng() и imagepng() | |
|
|
|
|
|
|
|
для: ride
(29.07.2009 в 22:44)
| | Нужно только еще небольшую проверочку сделать gif или jpg и два сценария соответственно
А так вообще советую посмотреть здесь: http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=145 - | |
|
|
|
|
|
|
|
для: maximum7
(29.07.2009 в 21:48)
| | центральная часть — плохо. ибо некоторые могут загрузить 1000x1000, тогда вообще непойми что получится. лучше масштабировать.
следующая функция получает имя файла (того, который только закачан), и возвращает уменьшенное изображение (не файл!!!), которое затем можно сохранить в любом формате (например, с помощью функции imagejpeg(<возвращенный_функцией_результат>, <файл_в_который_сохранить>);)
<?php
function GetThumbImage($file, $w = 70, $h = 70) {
$info = getimagesize($file);
switch ($info[2]) {
case 1: $im = imagecreatefromgif($file);
break;
case 2: $im = imagecreatefromjpeg($file);
break;
case 3: $im = imagecreatefrompng($file);
break;
default: return null;
}
if ($info[0] <= $w && $info[1] <= $h) return $im;
$nw = 0;
$nh = 0;
$a1 = $w / $info[0];
$a2 = $h / $info[1];
if ($a1 < $a2) {
$nw = $w;
$nh = round($info[1] * $a1);
if ($nh > $h) $nh = $h;
if ($nh == 0) $nh = 1;
} else {
$nh = $h;
$nw = round($info[0] * $a2);
if ($nw > $w) $nw = $w;
if ($nw == 0) $nw = 1;
}
$nim = imagecreatetruecolor($nw, $nh);
imagecopyresized($nim, $im, 0, 0, 0, 0, $nw, $nh, $info[0], $info[1]);
return $nim;
}
?>
|
| |
|
|
|