Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Графика


Автор: fics 29.3.2011, 11:01
Здравствуйте. 
Задача: есть картинка на диске, скажем 100пх на 100пх
Вопрос: как разрезать эту картинку на 100 частей (одна часть получается 10пх на 10пх) и вывести либо сохранить эти сто картинок???

Хотя бы примерно?

Автор: ayax2005 29.3.2011, 13:01
ну положим вывести можно и css-сом, а реально разрезать только каким-нить имаджиком.
Вообще цель какая - получить файлы и просто визуально разбить картинку для вьюхи?

Автор: fics 29.3.2011, 13:22
Re:реально разрезать только каким-нить имаджиком.
В чем вобщем и ворос, что нужно разрезать программно на php

Автор: ayax2005 29.3.2011, 13:24
http://php.net/manual/en/book.imagick.php

Автор: skyboy 29.3.2011, 14:33
ну, почему же. 
цикл + http://php.net/imagecopy + http://php.net/imagejpg.
только вот зачем это?  smile 

Автор: fics 30.3.2011, 13:41
Цитата(skyboy @ 29.3.2011,  14:33)
ну, почему же. 
цикл + http://php.net/imagecopy + http://php.net/imagejpg.
только вот зачем это?  smile

Зачем это? - это задание небольшое для знакомой сделать нужно.

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

Автор: skyboy 30.3.2011, 13:46
Цитата(fics @  30.3.2011,  12:41 Найти цитируемый пост)
ну вообще нужно вырезать не стандартную фигуру

вырезать - нет, подобного нет.
но можно в обход.
берешь файл-маску: в области "звезды" пиксели прозрачные, а за пределами "контура" - непрозрачные.  накладываешь эту прямоугольную маску на исходную картинку(imagecopymerge + c учетом alpha blending). и получаешь "вырезанную звезду". вот только полученная картинка будет все же обычная "прямоугольная".

Автор: fics 30.3.2011, 14:40
ясно, спасибо, попробую сейчас 

Автор: skyboy 30.3.2011, 15:52
затем было бы вообще хорошо избавиться от непрозрачного фона вокруг "звезды".
но ничего похожего на применение маски слоя в растровых редакторах, среди функций GD я не нашел.
разве что брать маску(условно - белая звезда на черном фоне) и, перебирая пиксели маски, делать пиксель на "вырезанной" картинке прозрачным(за границами звезды) или оставлять непрозрачные(внутри контура).

Автор: fics 31.3.2011, 11:07
Цитата(skyboy @ 30.3.2011,  15:52)
разве что брать маску(условно - белая звезда на черном фоне) и, перебирая пиксели маски, делать пиксель на "вырезанной" картинке прозрачным(за границами звезды) или оставлять непрозрачные(внутри контура).

Так бы было очень просто, но к сожалению не найду функцию - которая по координатам точки на картинке определит его цвет.


Вот если можно установить нужный пиксель на картинку:
bool imagesetpixel ( resource $image , int $x , int $y , int $color )

а вот взять для этой функции $color из другой картинки что то вроде imageGETpixel - такого не нашел(

Можно было бы просто циклом пробежать по пикселям картинки сравнивать их и если в XY - шаблона !=
цвету фона, то перекопировать на другую картинку пиксель 

Оп, извиняюсь, функция называется imagecolorat а искал imageGETpixel

Автор: skyboy 31.3.2011, 13:23
вот только это будет сильно медленно. 
если критично ко времени, лучше все ж поискать подобное в imagemagick

Автор: fics 31.3.2011, 14:25
Цитата(skyboy @ 31.3.2011,  13:23)
вот только это будет сильно медленно. 
если критично ко времени, лучше все ж поискать подобное в imagemagick

да что по времени это в данном задании не страшно, а вот что нужно использовать функцию
imagecolortransparent($img, $fon_color); чтобы сделать прозрачным фон - это не подходит, так как если в картинки будут пиксели == $fon_color эта функция и их сделает прозрачными, а по другому прозрачность никак не получиться сделать (

Автор: skyboy 31.3.2011, 15:01
Цитата(fics @  31.3.2011,  13:25 Найти цитируемый пост)
imagecolortransparent($img, $fon_color); чтобы сделать прозрачным фон - это не подходит, так как если в картинки будут пиксели == $fon_color эта функция и их сделает прозрачными, а по другому прозрачность никак не получиться сделать ( 

ну, здрасьте.
imagecolorallocatealpha + imagesetpixel

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)