| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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. только вот зачем это? |
| Автор: fics 30.3.2011, 13:41 | ||
Зачем это? - это задание небольшое для знакомой сделать нужно. С imagecopy понятно все, спасибо за наводку, ну вообще нужно вырезать не стандартную фигуру, к примеру звезду и наложить ее на квадратный прозрачный либо белый фон. Зачем это я не знаю. Просто скажите - можно ли так сделать? |
| Автор: skyboy 30.3.2011, 13:46 |
вырезать - нет, подобного нет. но можно в обход. берешь файл-маску: в области "звезды" пиксели прозрачные, а за пределами "контура" - непрозрачные. накладываешь эту прямоугольную маску на исходную картинку(imagecopymerge + c учетом alpha blending). и получаешь "вырезанную звезду". вот только полученная картинка будет все же обычная "прямоугольная". |
| Автор: fics 30.3.2011, 14:40 |
| ясно, спасибо, попробую сейчас |
| Автор: skyboy 30.3.2011, 15:52 |
| затем было бы вообще хорошо избавиться от непрозрачного фона вокруг "звезды". но ничего похожего на применение маски слоя в растровых редакторах, среди функций GD я не нашел. разве что брать маску(условно - белая звезда на черном фоне) и, перебирая пиксели маски, делать пиксель на "вырезанной" картинке прозрачным(за границами звезды) или оставлять непрозрачные(внутри контура). |
| Автор: fics 31.3.2011, 11:07 | ||
Так бы было очень просто, но к сожалению не найду функцию - которая по координатам точки на картинке определит его цвет. Вот если можно установить нужный пиксель на картинку: 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 | ||
да что по времени это в данном задании не страшно, а вот что нужно использовать функцию imagecolortransparent($img, $fon_color); чтобы сделать прозрачным фон - это не подходит, так как если в картинки будут пиксели == $fon_color эта функция и их сделает прозрачными, а по другому прозрачность никак не получиться сделать ( |