[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как загрузить фотографию и её уменьшенную копию?
Oggy
Доброе время суток, хочунаписать загрузчик фотографии.Вот что сделал сам:
фу-кция которая принемает с формы данние:


public function set_id()
{
if ($_POST['upload'] ) {
$allowed_filetypes = array('.jpg','.JPG','.Jpg','.gif','.GIF','.Gif','.bmp','.BMP','.Bmp','.png','.PNG','.Png'); // допустимые формати
$max_filesize = 5242880; // мак.розмір 5 mb
$upload_path = 'fancybox/example_jquery/fancybox_img/'; //папка загрузки
$name = $_FILES['userfile']['name']; //новое имя
$filename ='photo_'.$this->get_id().'_'.$name;
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);

if(strlen($_FILES['userfile']['tmp_name']) < 1)
die('вкажи файл для загрузки');
if(!in_array($ext,$allowed_filetypes))
die('wrong format');
if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
die('надто великий файл');
if(!is_writable($upload_path))
die('директорія закрита від запису.');

if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path.$filename))
{
$this->insert_photo_id($filename);//zapus v bazy


die('загрузился. <a href="' . $upload_path . $filename . '">смотреть</a><br>');

}


else
echo 'ерор';
}
}

// здесь я беру цыфру которая добавляется к названию фотки


public function get_id()
{
$this->admin_connect_bd();
$result = mysql_query('SELECT MAX(`id`) FROM photo') or die(mysql_error());

if (mysql_num_rows($result) > 0)
{
// $result;
return (mysql_result($result,0)+1);
}

return null;
}






Спустя 56 секунд (1.02.2012 - 16:22) Oggy написал(а):
как сделать копию а потом уменьшить её?

Спустя 2 минуты, 48 секунд (1.02.2012 - 16:25) T1grOK написал(а):
Загоняешь фотку через GD уменьшаешь и просто сохраняешь под другим именем или в другую папку. Тобишь уменьшеная копия получится "сразу" с оригинала.

Спустя 1 минута, 2 секунды (1.02.2012 - 16:26) neadekvat написал(а):
copy() - копия.
imagecopyresized() - ресайз.

Спустя 7 минут, 54 секунды (1.02.2012 - 16:34) Oggy написал(а):
Цитата (neadekvat @ 1.02.2012 - 13:26)
copy() - копия.
imagecopyresized() - ресайз.

можно так копировать?
$newfile =$name;

if (!copy($name, $newfile)) {
echo "не удалось скопировать $file...\n";
}

Спустя 1 час, 13 минут, 1 секунда (1.02.2012 - 17:47) Oggy написал(а):
Цитата (neadekvat @ 1.02.2012 - 13:26)
copy() - копия.
imagecopyresized() - ресайз.

imagecopyresized()... а что в скобках писать?

Спустя 1 минута, 39 секунд (1.02.2012 - 17:49) GET написал(а):
Oggy

там не все просто так...

nt imagecopyresized (resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)

Спустя 18 секунд (1.02.2012 - 17:49) neadekvat написал(а):
Цитата (Oggy @ 1.02.2012 - 17:34)
можно так копировать?

Ну, попробуй.. Но прежде, подумай, зачем один файл копировать в себя же.

Цитата (Oggy @ 1.02.2012 - 18:47)
а что в скобках писать?

В документации написано. Там заодно и примеры кода приведены.

Спустя 33 минуты, 35 секунд (1.02.2012 - 18:22) Bustle написал(а):
Чёт типа такого
<?php 

class
UploadCrop {

private $upload_dir = "uploads";
private $max_file = "5242880";
private $types = array('image/gif', 'image/png', 'image/jpeg');
private $max_width = "500";
private $max_height = "500";
private $thumb_width = "100";
private $thumb_height = "100";
private $errorBox = array (
"forbiddenFiles" => "Запрещенный тип файла",
"bigSize" => "Большой размер файла"
);

function __construct () {

$this->__createDir ($this->upload_dir);

}


public function uploadImage () {

$new_image = $this->upload_dir . "/" . $_FILES['userfile']['name'];

if (!in_array($_FILES['userfile']['type'], $this->types)) {
$this->__errorMessage["forbiddenFiles"];
}

if ($_FILES['userfile']['size'] > $this->max_file) {
$this->__errorMessage["bigSize"];
}

$source = $this->__toJpeg ($_FILES['userfile']);

$source = $this->__resizeImage ($source);

imagejpeg($source, $new_image, 90);

$sizes['width'] = imagesx($source);
$sizes['height'] = imagesy($source);
$sizes['thumbW'] = $this->thumb_width;
$sizes['thumbH'] = $this->thumb_height;

return $sizes;
}


public function createThumbnailImage($image, $width, $height, $start_width, $start_height){

$newImage = imagecreatetruecolor($this->thumb_width,$this->thumb_height);

$source = imagecreatefromjpeg($this->upload_dir . "/" . $image);

imagecopyresampled($newImage,$source,0,0,$start_width,$start_height,$this->thumb_width,$this->thumb_height,$width,$height);

$thumb_image_name = $this->upload_dir . "/min_" . $image;

imagejpeg($newImage,$thumb_image_name,90);

chmod($thumb_image_name, 0777);

return $thumb_image_name;

}

private function __createDir ($dir) {

if(!is_dir($dir)){
mkdir($dir, 0777);
chmod($dir, 0777);
}

}


private function __toJpeg ($file) {

if ($file['type'] == 'image/jpeg')
$source = imagecreatefromjpeg($file['tmp_name']);
elseif ($file['type'] == 'image/png')
$source = imagecreatefrompng($file['tmp_name']);
elseif ($file['type'] == 'image/gif')
$source = imagecreatefromgif($file['tmp_name']);
else
return
false;

return $source;

}

private function __resizeImage ($image) {

$width = imagesx($image);
$height = imagesy($image);

if ($width > $this->max_width) {

$scale = $this->max_width/$width;
$newImageWidth = ceil($width * $scale);
$newImageHeight = ceil($height * $scale);

$newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);

imagecopyresampled($newImage,$image,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height);

return $newImage;
} else {
return $image;
}


}


private function __errorMessage ($error) {

die ($errorBox[$error]);

}

}


?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.