Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Скрипт создания изображения.
Форумы портала PHP.SU » PHP » Программирование на PHP » Скрипт создания изображения.

Страниц (1): [1]
 

1. Dezmont - 16 Июля, 2010 - 21:57:29 - перейти к сообщению
Народ подскажите, что можно сделать?
PHP:
скопировать код в буфер обмена
  1. <?
  2. $x1      = $_POST['x1'];
  3. $y1      = $_POST['y1'];
  4. $w         = $_POST['w'];
  5. $h         = $_POST['h'];
  6. $cat1      = $_POST['cat'];
  7. $image1= $_POST['image'];
  8. ################################################################
  9.  
  10. $way = "./files/$cat1/$image1";
  11.  
  12. $newImg  = imagecreatetruecolor($w*4, $h*4);
  13. $srcImg  = imagecreatefromjpeg($way);
  14. imagecopyresampled($newImg, $srcImg, 0, 0, $x1*4, $y1*4, $w*4, $h*4, $w*4, $h*4);
  15. imagejpeg($newImg, "cropped.jpg");
  16. ?>

Это для создания изображения из существующего изображения. Всё умножается на 4, потому что манипуляции проводятся с картинкой 640*400. А берётся картинка 2560*1600.
x1-отступ по абсцисс, н1-отступ по ординат. W и H соответственно ширина и высота веделенной области.
И потом файл cropped.jpg выводится пользователю, потому что сам скрипт ничего не показывает:
<img src="cropped.jpg" >.

[b]
Теперь подскажите:
1) Будет ли вообще этот скрипт работать? Потому что cropped.jpg должна изменяться непосредственно на самом сервере. Т.е. этот файлик будет находиться в папочке со всеми скриптами.
2) Как это скажется на скорости работы сайта, к примеру если сразу 20 человек обратятся к этому скрипту, не получат ли они неправильную картинку?
3) Может можно что-нибудь сделать с этим скриптом, чтобы картинка просто выводилась пользователю, и нигде на сервере не сохранялась.
4) Минимальные размеры картинки, которые получаются 1600*1200, а максимальные 2134*1600. А нужно, чтобы во всех ситуациях получалось 1600*1200.
Стоит ли второй раз обрабатывать cropped.jpg, чтобы получить уменьшенное до нужных размеров изображение, или можно сделать этот как нибудь-попроще?

P.S. Буду ооочень признателен, если хоть кто-нибудь ответит на все эти вопросы. Нужна помощь. Если что-то непонятно, спросите я объясню по другому. =)
2. Мелкий - 16 Июля, 2010 - 22:14:48 - перейти к сообщению
1) криминала не вижу, должен по идее работать. Вот только srcx и srcy у imagecopyresampled (5 и 6-ые параметры) я так понимаю должны быть как раз нулевые, хотя зависит от цели скрипта, поэкспериментируйте.
2) все получат правильную картинку, но вот на скорости отразится отрицательно, тем более для такой крупной картинки.
3) у imagejpeg удалите второй параметр и высылайте соответствующий заголовок, но запрашивать картинку надо через html-тег, но у скрипта уже, и, по-видимому, гетом. Пост туда не передастся
4) пара условий, который будут проверять, какие нужны размеры. Или я не понял пункта.
3. Dezmont - 16 Июля, 2010 - 22:38:58 - перейти к сообщению
Спасибо. Но ещё возникли вопросы.
1) Так и задумано. Это Jcrop, там часть изображения по X или Y отрезается. С этим ясно.
2) Вот я и думаю, насколько отрицательно? Если +1 секунда при 10 одновременных подключениях, это ещё не очень страшно. Если больше, плохо. С этим потом разберусь, при покупке хостинга.
3) Я сделал вот так:
.
Нажимаю и у меня просто выводится кратинка, которую нельзя сохранить. То есть на странице http://localhost/3/saveCrop2.php она видима, но сохранить можно только скрипт. А при попытке открыть в новом окне вылазит куча Ошибок:
CODE (text):
скопировать код в буфер обмена
  1. Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in Z:\home\localhost\www\3\saveCrop2.php on line 13
  2.  
  3. Warning: imagecreatefromjpeg(./files//) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in Z:\home\localhost\www\3\saveCrop2.php on line 14
  4.  
  5. Warning: imagecopyresampled(): supplied argument is not a valid Image resource in Z:\home\localhost\www\3\saveCrop2.php on line 15
  6.  
  7. Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\3\saveCrop2.php:13) in Z:\home\localhost\www\3\saveCrop2.php on line 16
  8.  
  9. Warning: imagejpeg(): supplied argument is not a valid Image resource in Z:\home\localhost\www\3\saveCrop2.php on line 17
  10.  
  11. Warning: imagecreatefromjpeg(./files//) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in Z:\home\localhost\www\3\saveCrop2.php on line 18


4) Вот тут самая загвоздка. Мне в итоге нужно вывести пользователю изображение размером 1600*1200. В скрипте, который я привёл, могут получиться размеры от 1600*1200 до 2134 на 1600, в зависимости от того какую область изображения выделит пользователь. И выводится соответственно картинка большая чем нужно. И эту, получившуюся в результате скрипта, картинку нужно уменьшить до размеров 1600*1200 ничего не отрезая.
Вот, как то так.
4. qbik - 16 Июля, 2010 - 22:40:39 - перейти к сообщению
2. для проверки быстродействия в консоли ввести
$ ab -n 1000 -c 20 [http[s]://]hostname[:port]/path/твой_скрипт?параметры=параметры
-с количество одновременных запросов
-n общее число запросов

погоняй у себя, заочно не скажешь
5. Dezmont - 16 Июля, 2010 - 22:47:41 - перейти к сообщению
qbik пишет:
2. для проверки быстродействия в консоли ввести
$ ab -n 1000 -c 20 [http[s]://]hostname[:port]/path/твой_скрипт?параметры=параметры
-с количество одновременных запросов
-n общее число запросов

погоняй у себя, заочно не скажешь


А можно поподробнее? Куда это вставлять и где смотреть? Вместо hostname, port тоже что-то нужно указывать? В какой именно консоли?
6. Мелкий - 16 Июля, 2010 - 22:56:03 - перейти к сообщению
Dezmont пишет:
2) Вот я и думаю, насколько отрицательно? Если +1 секунда при 10 одновременных подключениях, это ещё не очень страшно. Если больше, плохо. С этим потом разберусь, при покупке хостинга.

от CPU зависит.

Dezmont пишет:
Нажимаю и у меня просто выводится кратинка, которую нельзя сохранить.

Dezmont пишет:
и нигде на сервере не сохранялась.

? Однако
вместо POST, передавайте этому скрипту GET-параметры, типа так: <img src="image.php?x1=100&y1=50&w=далее_по_тексту">

Dezmont пишет:
картинку нужно уменьшить до размеров 1600*1200 ничего не отрезая.

ну тогда немного геометрия может поплыть. И лучше сразу инициализировать 1600х1200 картинку, а потом копировать в ней не х*4, а вычислять размер посложнее, чтобы вписаться в заданные габариты.

Dezmont пишет:
А можно поподробнее? Куда это вставлять и где смотреть? Вместо hostname, port тоже что-то нужно указывать? В какой именно консоли?

ssh или физическая консоль никсовой машины. $ - их командное приветствие.
7. Dezmont - 16 Июля, 2010 - 23:28:25 - перейти к сообщению
Буду пробовать....=)

 

Powered by ExBB FM 1.0 RC1