PDA

Просмотр полной версии : Загрузка картинок на сервер и изменение оазмеров


mff
12.09.2008, 09:52
Ребят, как сделать загрузку картинок, но при этом чтобы менялся их размер и делались 3 копии, малая, средняя и оригинал? :confused: Может у кого примерчик есть?

BlackSun
12.09.2008, 09:54
Возьми любой скрипт для хостинга картинок, там полюбому будет "примерчик"

mff
12.09.2008, 10:06
СПС, вот сразу нашел:
10 скриптов хостинга картинок!

http://i039.radikal.ru/0801/ca/b1bf2ac7404c.jpg

В архиве находятся 10 популярных скриптов для создания хостинга картинок. Теперь выбрав наиболее понравившийся скрипт, Вы сможете создать собственный сервис по хранению изображений, наподобие foto.radikal, imageshack или других подобных сайтов.

Список скриптов в архиве (1.42 Mb):

CoSiS Free Image Host Script
EasyImageHoster 1.35
GMPH v1.0.3
Image Upload
Image Host Script 0.7
DXL dev\' Image Hosting Script
ImgUpload 2.0.1
UPLOADIMAGE v1.02
imageshack.us Clone
eXtreme Photo Hosting 2006

http://letitbit.net/download/9535a8173129/kpot.net-image.zip.html
http://depositfiles.com/files/2987111

Полез ковырять...

[x26]VOLAND
12.09.2008, 12:36
Я делаю вот так:

function resize($image, $new_width, $target) {
if (file_exists($image))
{
$image = ImageCreateFromJPEG($image);
$width = Imagesx($image);
$height = Imagesy($image);
$new_height = ($new_width * $height) / $width ;
$thumb = ImageCreateTrueColor($new_width,$new_height);
ImageCopyResampled($thumb, $image, 0,0,0,0, $new_width, $new_height, $width, $height);
ImageJPEG($thumb, $target, 100);
Imagedestroy($image);
}
}
$image - исходная картинка
$new_width - новая ширина (относительно неё происходит ресайз)
$target - целевая картинка

Пример вызова:
resize($image, 128, '128.jpg');
resize($image, 256, '256.jpg');

Получаем 2 уменьшенные картинки разного размера.

//PS: думаю загрузку на сервер сам реализуешь.

mff
12.09.2008, 12:41
[x26]VOLAND? то что надо! Спс! :)

imajo.ati
12.09.2008, 16:40
[x26]VOLAND
если высота картинки больше ширины, нужно задавать как раз высоту, т.к. ширина не будет известна изначально. к примеру если подгонять изображение 200x655 к 400х300

я по-другому решил это


function open_image($file) {
$im = @imagecreatefromjpeg($file);
if ($im !== false) return $im;
$im = @imagecreatefromgif($file);
if ($im !== false) return $im;
$im = @imagecreatefrompng($file);
if ($im !== false) return $im;
$im = @imagecreatefromgd2($file);
if ($im !== false) return $im;
$im = @imagecreatefromwbmp($file);
if ($im !== false) return $im;
$im = @imagecreatefromxbm($file);
if ($im !== false) return $im;
$im = @imagecreatefromstring(file_get_contents($file));
if ($im !== false) return $im;
return 'error';
}
//end_func

function imageresize($outfile,$infile,$neww,$newh) {

$im = open_image($infile);
if ( $im === 'error' ) return false;

else
{
$imajo_w = imagesx($im);
$imajo_h = imagesy($im);

if ( $imajo_w > $neww OR $imajo_h > $newh )
{
$nat = true;

if ( $imajo_w > $neww AND $imajo_h <= $newh )
{
$percent = $imajo_w / $neww;
$new_width = $neww;
$new_height = $imajo_h / $percent;
}
elseif ( $imajo_w <= $neww AND $imajo_h > $newh )
{
$percent = $imajo_h / $newh;
$new_height = $newh;
$new_width = $imajo_w / $percent;
}
else
{
$percent_h = $imajo_h / $newh;
$percent_w = $imajo_w / $neww;
if ( $percent_h > $percent_w )
{
$new_height = round($imajo_h / $percent_h);
$new_width = round($imajo_w / $percent_h);
}
else
{
$new_height = round($imajo_h / $percent_w);
$new_width = round($imajo_w / $percent_w);
}
}


$im1 = imagecreatetruecolor($new_width,$new_height);
imagecopyresampled($im1,$im,0 ,0 ,0 ,0 ,$new_width,$new_height,imagesx($im),imagesy($im)) ;
}
else
{
$im1 = false;
$nat = false;
}


if ( $im1 === false )
{
imagejpeg($im,$outfile,75);
imagedestroy($im);
}
else
{
imagejpeg($im1,$outfile,75);
imagedestroy($im);
imagedestroy($im1);
}
return $nat;
}
}
//end_func



но код длинный получился О_О
можно по желанию компактнее написать


скрипту нужно задать размеры для подгонки. если размер оригинала меньше размеров для подгонки, изображение не увеличивается. и в назначение копируется оригинал.
функция создает файл + возвращает, было ли изменено изображение