Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обрезать изображение при загрузке, по высоте 115 а по ширине 200 
V
    Опции темы
sayber
  Дата 13.2.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



Собственно сабж. Надо пропорционально резать все картинки height:115px, weight:200px

Я делал так:

Код

$dtname = md5($thistime.$title);
$picfile = $dtname."_".$_FILES['picshort']['name']; 
$putb = 'uploads/posts/p/'.basename($picfile);
$putb2 = 'uploads/posts/t/'.basename($picfile);

$pPath=$_FILES['picshort']['tmp_name'];
$pHeight=115;

$imageattr=array();
$imageattr=@getimagesize($pPath);
$pWidth=$pHeight/$imageattr[1]*$imageattr[0];
$pQual = 65;      

if (function_exists('imagecreatetruecolor')) 
     $tn_im=@imagecreatetruecolor($pWidth-1, $pHeight-1); 
else $tn_im=@imagecreate($pWidth-1, $pHeight-1); 

switch ($imageattr[2]) { 
     
     case "1": // 1 = GIF 
          $im=imagecreatefromgif($pPath); 
          @imagecopyresized ($tn_im, $im, 0, 0, 0, 0, $pWidth, $pHeight, $imageattr[0], $imageattr[1]); 
          imagegif($tn_im, $putb2); 
          imagedestroy($im); 
          break; 
          
     case "2": // 2 = JPG 
          $im=imagecreatefromjpeg($pPath); 
          @imagecopyresized ($tn_im, $im, 0, 0, 0, 0, $pWidth, $pHeight, $imageattr[0], $imageattr[1]); 
          imagejpeg($tn_im, $putb2, $pQual); 
          imagedestroy($im); 
          break; 
          
     case "3": // 3 = PNG 
          $im=imagecreatefrompng($pPath); 
          @imagecopyresized ($tn_im, $im, 0, 0, 0, 0, $pWidth, $pHeight, $imageattr[0], $imageattr[1]); 
          imagepng($tn_im, $putb2); 
          imagedestroy($im); 
          break; 
}
@move_uploaded_file($_FILES['picshort']['tmp_name'], $putb);
imagedestroy($tn_im); 



То есть обрезаю по высоте. А как делать одинаковые - по высоте и ширине не пойму. Может кто модифицирует мой код?

 smile 
--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
bars80080
Дата 13.2.2008, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



почитатйте тут http://forum.vingrad.ru/index.php?showtopi...t&p=1339520

Это сообщение отредактировал(а) bars80080 - 13.2.2008, 15:42
PM MAIL WWW   Вверх
sayber
Дата 13.2.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



Читал я данную тему - мало что понял.
А вот что я просил написано под моим кодом
--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
bars80080
Дата 13.2.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



блин, это же чисто математическая задача, к php не имеющая никакого отношения

$imageattr[0] - ширина изобр
есть начальные данные:

1. w=200, h=115, равняем по ширине
pWidth = w; pHeight = w*($imageattr[1] / $imageattr[0])

2. w=200, h=115, равняем по высоте
pHeight = h; pWidth = h*($imageattr[0] / $imageattr[1])

3. w=200, h=115, равняем пропорционально, в пределах максимальных значений
w1 = w; h1 = w*($imageattr[1] / $imageattr[0])
if(h1 > h) {
h1 = h; w1 = h*($imageattr[0] / $imageattr[1])
}
pWidth = w1; pHeight = h1;

остаётся только условия расставить
PM MAIL WWW   Вверх
sayber
Дата 18.2.2008, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



Как само условие обрезания сделать....

--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
GeneralElectric
Дата 18.2.2008, 10:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 1
Всего: 16



sayber, Ты должен сам сначала решить - как ты хочешь менять картинки, чтобы они были одинаковыми. Сам, понимаешь? Перед тем, как задавать вопрос, ты должен сам решить, что тебе нужно.
Положить перед собой фотографию, представить, как она будет выглядеть в нужных тебе пропорциях, и словами это описать.

PM MAIL   Вверх
sayber
Дата 18.2.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



GeneralElectric, 

нашел готовый пример:

Код



function makeIcons_MergeCenter($src, $dst, $dstx, $dsty){

//$src = original image location
//$dst = destination image location
//$dstx = user defined width of image
//$dsty = user defined height of image

$allowedExtensions = 'jpg jpeg gif png';

$name = explode(".", $src);
$currentExtensions = $name[count($name)-1];
$extensions = explode(" ", $allowedExtensions);

for($i=0; count($extensions)>$i; $i=$i+1){
if($extensions[$i]==$currentExtensions)
{ $extensionOK=1;
$fileExtension=$extensions[$i];
break; }
}

if($extensionOK){

$size = getImageSize($src);
$width = $size[0];
$height = $size[1];

if($width >= $dstx AND $height >= $dsty) {

$proportion_X = $width / $dstx;
$proportion_Y = $height / $dsty;

if($proportion_X > $proportion_Y ){
$proportion = $proportion_Y;
}else{
$proportion = $proportion_X ;
}
$target['width'] = $dstx * $proportion;
$target['height'] = $dsty * $proportion;

$original['diagonal_center'] =
round(sqrt(($width*$width)+($height*$height))/2);
$target['diagonal_center'] =
round(sqrt(($target['width']*$target['width'])+
($target['height']*$target['height']))/2);

$crop = round($original['diagonal_center'] - $target['diagonal_center']);

if($proportion_X < $proportion_Y ){
$target['x'] = 0;
$target['y'] = round((($height/2)*$crop)/$target['diagonal_center']);
}else{
$target['x'] =  round((($width/2)*$crop)/$target['diagonal_center']);
$target['y'] = 0;
}

if($fileExtension == "jpg" OR $fileExtension=='jpeg'){
$from = ImageCreateFromJpeg($src);
}elseif ($fileExtension == "gif"){
$from = ImageCreateFromGIF($src);
}elseif ($fileExtension == 'png'){
 $from = imageCreateFromPNG($src);
}

$new = ImageCreateTrueColor ($dstx,$dsty);

imagecopyresampled ($new,  $from,  0, 0, $target['x'],
$target['y'], $dstx, $dsty, $target['width'], $target['height']);

 if($fileExtension == "jpg" OR $fileExtension == 'jpeg'){
imagejpeg($new, "tt", 70);
}elseif ($fileExtension == "gif"){
imagegif($new, "tt");
}elseif ($fileExtension == 'png'){
imagepng($new, "tt");
}
}
}

@move_uploaded_file(md5("test.jpg"), $putb);
}

if (!empty($_FILES['picshort']['tmp_name'])) {

$dtname = md5($thistime.$title);
$picfile = $dtname."_".$_FILES['picshort']['name']; 
$putb = 'tt/'.basename($picfile);

makeIcons_MergeCenter($picfile, $picfile, "180", "120");

 
} else  { print "sorry"; }


У меня тут 2 проблемы.
1) Как сделать что бы первью копировалась в нужную мне папку с именем $picfile.
2) Когда приходит файл из формы, функция  getImageSize($src) ругается.

getimagesize(d41d8cd98f00b204e9800998ecf8427e_3_3.jpg) [function.getimagesize]: failed to open stream: No such file or directory
--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
GeneralElectric
Дата 18.2.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 1
Всего: 16



Эта функция делает не то, что написано у тебя в вопросе. Не жестко заданные высота и ширина, а пропорциональное изменение.
Это во-первых.

Во-вторых, если тебе нужно было пропорциональное изменение, то такую функцию искать не надо - в этом разделе форума каждый второй топик содержит такую же. 

В-треьих, ты так и не ответил на вопрос, что же тебе нужно. А это очень плохо. Человек, который не знает, куда идет, никуда не придет.

PM MAIL   Вверх
sayber
Дата 18.2.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



Что нужно: Взять с компа фотографию. Уменьшить ее до размера (уже) 180х120 w\h и скопировать в нужную папку.
То есть в начале уменьшаем по высоте и все что больше ширины 180px отрезаем.
Если фото получилось 200х120 то соответственно отрезается 20px от ширины в 180px 
--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
GeneralElectric
Дата 18.2.2008, 13:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 1
Всего: 16



Ясно. То есть, обрезать. К примеру, если на фото изображена загорающая девушка, то отрезать у нее голову и ноги. Ну что ж. Тоже художественный прием.

К сожалению, функция, которую ты нашел, тебе не подходит.
PM MAIL   Вверх
sayber
Дата 18.2.2008, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



GeneralElectric, резать от верхнего левого угла.

Может тогда посоветуешь функцию - если эта не подходит.
--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
bars80080
Дата 18.2.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



PM MAIL WWW   Вверх
sayber
Дата 18.2.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.7.2006
Где: Moscow - qwerty

Репутация: нет
Всего: нет



bars80080, 

http://ru2.php.net/manual/ru/function.imagecopy.php

Не нашел не чего подходящего.

Добавлено через 40 секунд
И мне ссылки сейчас не нужны. Т.к. до завтра это надо сделать. Иначе [censored 6].
--------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~WoW CafeSayber ©  Портфолио ~~~~~~~~~~~~~~~~~~~~~~~~~~~
PM MAIL WWW ICQ   Вверх
gta4kv
Дата 18.2.2008, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 8
Всего: 91



sayber, если вам ссылки не нужно, то вперед в раздел помощи.

Добавлено через 36 секунд
пс. http://forum.vingrad.ru/forum/topic-195811.html

Это как раз то что нужно вам
PM MAIL   Вверх
bars80080
Дата 18.2.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



sayber, послушайте, вы же алгоритм чётко выразили, что вам мешает воплотить его в коде?
Цитата
Взять с компа фотографию. Уменьшить ее до размера (уже) 180х120 w\h и скопировать в нужную папку.
То есть в начале уменьшаем по высоте и все что больше ширины 180px отрезаем.
Если фото получилось 200х120 то соответственно отрезается 20px от ширины в 180px 

фотку получили, обрабатываем его вашим кодом из первого поста (если он работает), если нет, то из темы, что я давал, он точно работает, но изначально немного подправляем его

меняем размер фотографии до высоты в 120
Цитата
2. w=200, h=115, равняем по высоте
pHeight = h; pWidth = h*($imageattr[0] / $imageattr[1])

затем засовываем его в функцию imagecopy, там вроде всё понятно написано

приведите свой код, если не выходит
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.0701 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.