Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
PHP скрипт для получния, ресайзинга и закачки на сервер фото
Новая тема
Ответить
цитата
04/06/08 в 22:36
Proo
В общем задача по урл имиджа скачать его и закачать на мой сервер в уменьшенном размере..
Может подскажите скрипт, или хотя бы удобные библиотеки которые можно использовать?
Заранее спасибо
цитата
05/06/08 в 05:57
dDan
file_get_contents скачаешь
сохранишь а дальше кури маны по ImageMagick или GD
и потом
exec('/usr/bin/convert'.'тут то что накуришь'.'old.jpg resized.jpg');
гугл тебе в помощь
цитата
05/06/08 в 07:20
Corex
Для работы с HTTP/FTP можно выбрать что-то отсюда:
http://phpclasses.mkdata.net/browse/class/6.html
Для работы с картинками отсюда:
http://phpclasses.mkdata.net/browse/class/11.html
цитата
05/06/08 в 11:36
Axel-B
Примерно так наверно.
Код:
<?
function url_content($url, $ref="") {
$USERAGENT = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)";
$ch = curl_init( );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_USERAGENT, $USERAGENT );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
curl_setopt( $ch, CURLOPT_REFERER, $ref );
curl_setopt( $ch, CURLOPT_COOKIEJAR, "temp.txt" );
curl_setopt( $ch, CURLOPT_COOKIEFILE, "temp.txt" );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt( $ch, CURLOPT_TIMEOUT, 60 );
$get = curl_exec( $ch );
curl_close( $ch );
return $get;
}
function save_content($file,$dest) {
$fn = basename($file);
$fnd=$file;
$dest = $dest.$fn;
$ch = curl_init();
$fp = fopen($fnd,"r");
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 300);
curl_setopt($ch, CURLE_OPERATION_TIMEOUTED, 300);
curl_setopt($ch, CURLOPT_URL, $dest);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($fnd));
curl_exec($ch);
fclose ($fp);
$errorMsg = '';
$errorMsg = curl_error($ch);
$errorNumber = curl_errno($ch);
curl_close($ch);
if($errorMsg or $errorNumber) {echo "$errorMsg - $errorNumber<br>";}
}
//Author Alan Reddan Silverarm Solutions
//Date 27/01/2005
//Function that works well with images.
//It takes the image and reduces its size to best fit. i.e If you have an image
//that is 200 X 100 and you want a thumbnail of 75 X 50,
//it first resizes the image to 100 X 50
//and then takes out a portion 75 X 50 from then center of the input image.
//So loads of image information is retained.
//The corollary also holds if your input image is 100 X 200
//it first resizes image to 75 X 150 and then takes out a
//portion 75 X 75 from the centre
// The advantage here is that function decides on whether
//resize is by width or height itself.
//it also decides whether to use the height or the width as the base start point
//in the case that athumbnail is rectangular
function resize_then_crop( $filein,$fileout,$imagethumbsize_w,$imagethumbsize_h,$red,$green,$blue)
{
// Get new dimensions
list($width, $height) = getimagesize($filein);
$new_width = $width * $percent;
$new_height = $height * $percent;
if(preg_match("/.jpg/i", "$filein"))
{
$format = 'image/jpeg';
}
if (preg_match("/.gif/i", "$filein"))
{
$format = 'image/gif';
}
if(preg_match("/.png/i", "$filein"))
{
$format = 'image/png';
}
switch($format)
{
case 'image/jpeg':
$image = imagecreatefromjpeg($filein);
break;
case 'image/gif';
$image = imagecreatefromgif($filein);
break;
case 'image/png':
$image = imagecreatefrompng($filein);
break;
}
$width = $imagethumbsize_w ;
$height = $imagethumbsize_h ;
list($width_orig, $height_orig) = getimagesize($filein);
if ($width_orig < $height_orig) {
$height = ($imagethumbsize_w / $width_orig) * $height_orig;
} else {
$width = ($imagethumbsize_h / $height_orig) * $width_orig;
}
if ($width < $imagethumbsize_w)
//if the width is smaller than supplied thumbnail size
{
$width = $imagethumbsize_w;
$height = ($imagethumbsize_w/ $width_orig) * $height_orig;;
}
if ($height < $imagethumbsize_h)
//if the height is smaller than supplied thumbnail size
{
$height = $imagethumbsize_h;
$width = ($imagethumbsize_h / $height_orig) * $width_orig;
}
$thumb = imagecreatetruecolor($width , $height);
$bgcolor = imagecolorallocate($thumb, $red, $green, $blue);
ImageFilledRectangle($thumb, 0, 0, $width, $height, $bgcolor);
imagealphablending($thumb, true);
imagecopyresampled($thumb, $image, 0, 0, 0, 0,
$width, $height, $width_orig, $height_orig);
$thumb2 = imagecreatetruecolor($imagethumbsize_w , $imagethumbsize_h);
// true color for best quality
$bgcolor = imagecolorallocate($thumb2, $red, $green, $blue);
ImageFilledRectangle($thumb2, 0, 0,
$imagethumbsize_w , $imagethumbsize_h , $white);
imagealphablending($thumb2, true);
$w1 =($width/2) - ($imagethumbsize_w/2);
$h1 = ($height/2) - ($imagethumbsize_h/2);
imagecopyresampled($thumb2, $thumb, 0,0, $w1, $h1,
$imagethumbsize_w , $imagethumbsize_h ,$imagethumbsize_w, $imagethumbsize_h);
if ($fileout !="")imagegif($thumb2, $fileout); //write to file
}
//Загрузка и Обработка Картинки Ковыряем под себя здесь
$urlgal="http://localhost/url-img.jpg"; // URL исходной картинки
$img=url_content($urlgal);
if(file_exists('./temp.jpg')){unlink('./temp.jpg');}
$fp=fopen('./temp.jpg','wb');
fwrite($fp,$img);
fclose($fp);
$filein = './temp.jpg'; // File in
$fileout = './temp2.jpg'; // Fileout - optional
$imagethumbsize_w = 100; // thumbnail size (area cropped in middle of image)
$imagethumbsize_h = 150; // thumbnail size (area cropped in middle of image)
resize_then_crop( $filein,$fileout,$imagethumbsize_w,$imagethumbsize_h,/*rgb*/"255","255","255");
echo "w - $imagethumbsize_w, h - $imagethumbsize_h";
$dest="ftp://login:pass@ftp.your-host.com/"; // ftp куда заливать
save_content('./temp2.jpg',$dest);
echo "Готово!";
?>
цитата
06/06/08 в 11:51
Cibtor
Proo писал:
Может подскажите скрипт
CibCM
- все что тебе нужно и даже больше
цитата
06/06/08 в 23:45
Proo
всем спасибо, поизучаю
цитата
10/06/08 в 00:25
Proo
Хотел использовать вариант что описал Axel-B, но на виндах GD не стоит.. соответственно некоторые функции не работают, напр imagecreatefromjpeg и другие..
Никто не подскажет как установить GD на виндах?
Закачал, установил..
http://sourceforge.net/project/downloading.php?groupname=gnuwin32&a or=surfnet
но может надо какие настройки еще.. пока не работает..
цитата
10/06/08 в 01:24
Dantist
Открой c:\windows\php.ini и сделай поиск по "gd". Найдешь строчку с php_gd2.dll (так в php4 Он назывется :). Типа такой:
Цитата:
;extension=php_gd2.dll
Как найдешь соответствующую строчку - убери знак ";" перед ней... Далее пробуй запустить скрипт. Если всё-равно не работает, то загляни в папку с установленным php, там подпапка extensions и поищи там файлик php_gd2.dll. Если его там нет, то надо скачать с php.net zip-фаил соответствующий и распаковать в папку с пхп...
Т.е. на php.net, сам php выдают 2 пакетами:
Цитата:
# PHP 5.2.6 zip package [9,516Kb] - 3 May 2008
# PHP 5.2.6 installer [19,373Kb] - 6 May 2008
Вот в zip package лежит как php_gd2.dll, так и инфа по установке extensionoв... :)
Дерзай!
цитата
10/06/08 в 10:40
Proo
В общем дерзанул
Пока не очень.. раскомментил библиотеку в php.ini, загрузил php, копирнул длл, сначала в корень апаче, потом создал ext - туда
Выдает ошибку: Unknown(): Unable to load dynamic library './php_gd2.dll' - Не найден указанный модуль
Попытаюсь разобраться, может кто подскажет что не так? Стоит старый ПХП (4.1 вроде), может в этом дело?
цитата
10/06/08 в 10:47
Proo
Скопировал в Windows.. и наконец в папку с ПХП (как мне писали вообще то
), теперь пишет не найдет php5ts.lib.. я так понимаю пошла уже зависимость от 5ого ПХП.. может устнавоить сразу целиком? Если да, как грамотно это сделать поверх ПХП4?
цитата
10/06/08 в 11:01
Proo
Попробовал установить PHP5, заменил что в папке c:\PHP на новое.. php.ini тоже новый закачал в WINDOWS, дает ошибку
Internal Server Error
похоже самому не справиться
цитата
10/06/08 в 12:03
Sha
gd2 есть и под php4 и под php5. Надо из правильного пакета брать.
Я почему-то помню что gd2 шёл с php4 сразу. Могу ошибаться.
Сейчас рекоммендуют переходить на php5 ибо php4 прекращают развивать.
Ставишь php5 поверх 4
цитата
10/06/08 в 12:16
Axel-B
Установи XAMPP и не мучайся, ИМХО очень хороший набор(чтоб заработал curl, раскоментируй в php.ini нужную строку, по аналогии с написанным выше).
* Apache HTTPD 2.2.8 + Openssl 0.9.8g
* MySQL 5.0.51a
* PHP 5.2.5
* PHP 4.4.8
* phpMyAdmin 2.11.4
* FileZilla FTP Server 0.9.25
* Mercury Mail Transport System 4.52
цитата
10/06/08 в 12:35
Proo
Всех благодарю и +
В общем сделал, сразу на серваке пока, на локальной время жалко, попозже может
Все работает, только ошибка когда файла нет.. на диске узнать есть ли файл - file_exists, а как если по урл нужно?
цитата
10/06/08 в 12:46
Proo
Во нашел
Код:
function url_exists($url) {
// Version 4.x supported
$handle = curl_init($url);
if (false === $handle)
{
return false;
}
curl_setopt($handle, CURLOPT_HEADER, false);
curl_setopt($handle, CURLOPT_FAILONERROR, true); // this works
curl_setopt($handle, CURLOPT_NOBODY, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
$connectable = curl_exec($handle);
curl_close($handle);
return $connectable;
}
Новая тема
Ответить
Эта страница в полной версии