X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Корректировка изображения...
Panich
Panich
Topic Starter сообщение 6.6.2012, 12:20; Ответить: Panich
Сообщение #1


Смысл в том,что бы сохранить в базу три изображения:
1. Исходное.
2. Размером 180х180.
3. Размером 80х80.
Код:
[PHP]$path_to_directory = "files/avatars/";
$filename = $_FILES['fupload']['name'];
$source = $_FILES['fupload']['tmp_name'];
$date = time();
$target = $path_to_directory."big_".$date.".jpg";
move_uploaded_file($source, $target);
$big_avatar = $target;

$target_smoll = $path_to_directory."smoll_".$date.".jpg";
move_uploaded_file($source, $target_smoll);

if(preg_match('/[.](GIF)|(gif)$/', $filename))
{
$im = imagecreatefromgif($target);
}
if(preg_match('/[.](PNG)|(png)$/', $filename))
{
$im = imagecreatefrompng($target);
}
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename))
{
$im = imagecreatefromjpeg($target);
}
$w = 180;
$w_src = imagesx($im);
$h_src = imagesy($im);
$dest = imagecreatetruecolor ($w,$w);

$w_s = 80;
$dest_s = imagecreatetruecolor ($w_s,$w_s);
if ($w_src > $h_src)
{
imagecopyresampled ($dest, $im, 0, 0, round ((max($w_src,$h_src)-min($w_src,$h_src))/2), 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
imagecopyresampled ($dest_s, $im, 0, 0, round ((max($w_src,$h_src)-min($w_src,$h_src))/2), 0, $w_s, $w_s, min($w_src,$h_src), min($w_src,$h_src));
}
else
{
if ($w_src < $h_src)
{
imagecopyresampled ($dest, $im, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
imagecopyresampled ($dest_s, $im, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
}
else
{
if ($w_src == $h_src)
{
imagecopyresampled ($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
imagecopyresampled ($dest_s, $im, 0, 0, 0, 0, $w_s, $w_s, $w_src, $w_src);
}
}
}
imagejpeg($dest, $path_to_directory.$date.".jpg");
$avatar = $path_to_directory.$date.".jpg";
imagejpeg($dest_s, $path_to_directory."smoll_".$date.".jpg");
$smoll_avatar = $path_to_directory."smoll_".$date.".jpg";[/PHP]
На выходе:
Оригинал сохраняется как нужно, 180х180 тоже всё как хочу,а 80х80 обрезается в верхний левый ряд.Всё с ним делаю как и с 180х180,а результат другой.Нужны не обрезанные углы,а миниатюры...
Прошу помощи...
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 6.6.2012, 12:56; Ответить: r3ntg3n
Сообщение #2


Ну, во-первых, определять тип файла по расширению:
(Panich @ 6.6.2012, 15:20) *
[PHP]if(preg_match('/[.](GIF)|(gif)$/', $filename))[/PHP]

это йаzz. А если я возьму бинарник и просто поставлю в конце имени .jpg?
Используйте getimagesize() + к этому можно можно из результатов получить mime - image_type_to_mime_type()
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Panich
Panich
Topic Starter сообщение 6.6.2012, 13:03; Ответить: Panich
Сообщение #3


Спасибо!Сейчас почитаю.
А по решению проблемы...!?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 6.6.2012, 13:14; Ответить: r3ntg3n
Сообщение #4


(Panich @ 6.6.2012, 15:20) *
[PHP]round ((max($w_src,$h_src)-min($w_src,$h_src))/2)[/PHP]
Я вот этого вашего чуда не пойму никак... Вы хотите, чтобы аватар кадрировался до квадратного изображения со стороной в 180 пикселей? Сделайте, как сделано в ВК - пользователь загружает фотку, она не кроппится, а уменьшается до 180 пикселей по меньшей стороне, а после загрузки показывается пользователю на странице с возможностью выбора зоны кроппинга - http://deepliquid.com/content/Jcrop.html Зону кроппинга можно залочить, чтобы была квадратной, и ее можно было только перетаскивать.

Создаете в форме скрытые поля, в которые скрипт будет записывать выбранное пользователем положение (достаточно будет верхнего левого угла), а обработчик формы уже будет обрезать фотку по желанию пользователя. Только не забудьте проверять наличие элементов с именами полей в результатах запроса, а то могут попасться кулхацеры, которые захотят подправить код страницы в chrome или firebug.

ИМХО, пользаку будет удобно, сможет сам выбрать, какую область он хочет выдеть на аварке. Но если хотите, чтобы все решала система - ща гляну.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Panich
Panich
Topic Starter сообщение 6.6.2012, 14:50; Ответить: Panich
Сообщение #5


Именно!Буду кодом сам выбирать по верхнему краю квадрат,а остальное откидывать.Хочу пока хоть так написать,что бы уже запустить сайт в работу...Уже потом,если пойдёт,буду примочки разные вешать на него.
Вопрос всё ещё остаётся актуальным:почему при уменьшении 180х180 всё работает как нада,а при уменьшении 80х80 обезается по правому верхнему углу...!?

Чо-то ничего внятного не могу найти про:
[PHP]image_type_to_mime_type()[/PHP]
Одна бурда и вопросы на форумах...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 6.6.2012, 17:08; Ответить: r3ntg3n
Сообщение #6


А тут не? => http://ua.php.net/manual/ru/function.image...o-mime-type.php
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Panich
Panich
Topic Starter сообщение 6.6.2012, 17:29; Ответить: Panich
Сообщение #7


Ага!Спасибо...!!!
А в чём ошибка у меня то!?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 6.6.2012, 23:13; Ответить: r3ntg3n
Сообщение #8


(Panich @ 6.6.2012, 15:20) *
[PHP]if ($w_src > $h_src)
{
/* 2 x imagecopyresampled */
}
else
{
if ($w_src < $h_src)
{
/* 2 x imagecopyresampled */
}
else
{
if ($w_src == $h_src)
{
/* 2 x imagecopyresampled */
}
}
}[/PHP]

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

Во-вторых, если у вас не выполнилось первое условие, то зачем делать вложенное второе? Про else if вы, наверное, не знаете?

В-третьих, если у вас не выполняется первое условие (ширина изображения больше его высоты), а потом не выполняется второе (ширина меньше высоты), то какое можно сделать предположение? Наверно, что они равные (ширина и высота)?... Тогда зачем у вас третья проверка? Или вы видите еще какой-то вариант? о_О.

О ответе на ваш вопрос говорим несколько позже.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 6.6.2012, 23:25; Ответить: r3ntg3n
Сообщение #9


Дальше, ваши чудесные вызовы функции:

(Panich @ 6.6.2012, 15:20) *
[PHP]imagecopyresampled ($dest, $im, 0, 0, round ((max($w_src,$h_src)-min($w_src,$h_src))/2), 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
imagecopyresampled ($dest_s, $im, 0, 0, round ((max($w_src,$h_src)-min($w_src,$h_src))/2), 0, $w_s, $w_s, min($w_src,$h_src), min($w_src,$h_src));[/PHP]

Во-первых, если вы в конструкциях if () {} else {} уже определили, ширина или высота больше, то зачем опять опрелять то же самое через max || min? Во-вторых, посмотрите, за что отвечает каждый из агрументов функции imagecopyresampled(). Если сложно искать - вот здесь. Другое дело, если вы хотите вырезать центральную часть масштабированного изображения, но все равно это делается не так.

А если по существу, то в ваших вызовах и идет ошибка: следующие после нулей аргументы - это соотвественно X и Y координаты, с которых начинать копирование и масштабирование исходного изображения. Поставьте 0 и там, и там, тогда копирование/масштабирование будет идти точно от верхнего угла, а не будет смещено.

А вот последние 2 аргумента просто тупо замените на ширину и высоту исходного изображения соотвественно, например, как здесь:
(Panich @ 6.6.2012, 15:20) *
[PHP]imagecopyresampled ($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
imagecopyresampled ($dest_s, $im, 0, 0, 0, 0, $w_s, $w_s, $w_src, $w_src);[/PHP]

И да прибудет с вами сила.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Panich
Panich
Topic Starter сообщение 7.6.2012, 9:38; Ответить: Panich
Сообщение #10


Хотел бы начать с того,что этот код я с уроков Попова слизал и под себя как смог подстроил.А на самом деле слабо разбираюсь в кодировании при работе с изображениями,да что уж там-вообще не профи в кодировании,так,когда время есть,читаю книги и пробую писать...
(r3ntg3n @ 7.6.2012, 02:13) *
зачем делать вложенное

Это для перебора всех возможных вариантов...и тут всё предельно просто:если меньше-то делаем это,если больше,то вот это!Знания,которыми я в данный момент обладаю позволили мне сделать только это!:)))
(r3ntg3n @ 7.6.2012, 02:25) *
И да прибудет с вами сила.

Это очень нужно,так как времени из-за основной работы всё это изучать совсем НЕТ,но,естественно, спасибо большое за помощь!!!Буду стараться и больше не выкладывать сюда "говнокод"!:)))
Удачи!

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Корректировка Open Real Estate
Откорректировать шаблон
0 nb001 2808 24.6.2018, 23:10
автор: nb001
Открытая тема (нет новых ответов) Изображения с shutterstock от 15 рублей/штука
5 Mr_Big 3670 10.9.2017, 21:30
автор: Palundra
Открытая тема (нет новых ответов) Вывод изображения при наведения на часть картинки по area
1 androv77 4842 16.7.2016, 17:32
автор: -YroKPROG-
Открытая тема (нет новых ответов) Создаю фрактальные изображения для разных целей
22 Russ33 5074 27.6.2016, 21:42
автор: Russ33
Открытая тема (нет новых ответов) Готовые статьи недорого (рерайт + корректировка)
Тематики: туризм, путешествия, диеты, здоровье, женская и др.
1 Kabardin 3467 4.2.2015, 18:28
автор: Kabardin


 



RSS Текстовая версия Сейчас: 24.4.2024, 6:28
Дизайн