Был нужен скрипт легкой пикселизации изображения как на табло для имитации надписи расписания маршрута. Что из этого вышло мне понравилось гораздо больше, чем я ожидал изначально. Поэтому выкладываю: PHP: <? /** * @author Arthur Andersen [at] php.ru * @version 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 */ // Коэффициент покрытия (размер будет увеличен на это число) define('EFX_COEFFICIENT', 3); // желательно не больше 3/4 // png/jpg/gif или ещё чего. Мне это нужно для PNG $source = imagecreatefrompng("Dark_circles_(cropped).png"); // Source size $source_x = imagesx($source); $source_y = imagesy($source); // Create zoomed image $target = imagecreatetruecolor($source_x*EFX_COEFFICIENT, $source_y*EFX_COEFFICIENT); // Pixelate for($x = 1; $x < $source_x; $x++) { for($y = 1; $y < $source_y; $y++) { $color = imagecolorsforindex($source, imagecolorat($source, $x, $y)); $point = array( 'x' => ($x * EFX_COEFFICIENT), 'y' => ($y * EFX_COEFFICIENT), ); for($j = 0; $j < EFX_COEFFICIENT; $j++) { imagesetpixel($target, $point['x'], $point['y'], imagecolorallocatealpha($target, $color['red'], $color['green'], $color['blue'], $color['alpha'] ) ); } } } // png/jpg/gif header('Content-type: image/png'); imagepng($target); ?> Пара примеров: 1. Оригинал изображения (фотография взята из википедии): http://savepic.ru/2290617.png 2. После обработки (скрипт шустрый): http://savepic.ru/2262969.png Кому надо - пользуйтесь. Мне надо =)
Сам спросил, сам ответил Судя по картинке - просто тыкает несколько черных пикселей за каждым из картинки?
Нет. Иначе бы можно было опустить третий цикл, который, собственно, отвечает за эффект. Если его немного видоизменить, то он будет рисовать диагональные контуры либо разрозненную сетку.
Apple ну я имею ввиду, если не брать во внимание добавление промежуточных горизонтальных сплошных полос. Смысл то - просто раздвинуть пиксели между собой, на равномерное расстояние и залить черным фон?
У меня получилось попроще... Код (Text): for($x = 1; $x < $source_x; $x++) { for($y = 1; $y < $source_y; $y++) { imagesetpixel( $target, $x * EFX_COEFFICIENT, $y * EFX_COEFFICIENT, imagecolorat($source, $x, $y) ); } } Разницы на среднестатистическом мониторе не заметил.
Apple Не знаешь, как сделать, чтобы на картинке всё свелось к двум цветам: всё, что тёмное, стало черным, всё, что светлое - белым? Не знаю даже, как это у могучего гугла спросить.
PHP: <? /** * @author Apple */ $source = imagecreatefrompng('apple_av.png'); $source_x = imagesx($source); $source_y = imagesy($source); $target = imagecreate($source_x, $source_y); // Allocate white and black colors for future $black = imagecolorallocate($target, 0, 0, 0); $white = imagecolorallocate($target, 255, 255, 255); // Trying to find edges for($x = 1; $x < $source_x; $x++) { for($y = 1; $y < $source_y; $y++) { $colorAt = imagecolorsforindex($source, imagecolorat($source, $x, $y)); $colorTo = max($colorAt['red'], $colorAt['green'], $colorAt['blue']); // If pixel's color is lower than 128 then it will be black if($colorTo < 128) { imagesetpixel($target, $x, $y, $black); } else imagesetpixel($target, $x, $y, $white); } } header('Content-type: image/png'); imagepng($target); ?> 1. Картинка http://savepic.ru/2281256.png 2. После обработки http://savepic.ru/2285352.png Скрипт лично у меня жуть как тормозит. Смотри сам.
Мне бы по душе больше такой вариант: PHP: <? /** * @author Apple * Create black and white image */ $source = imagecreatefrompng('apple_av.png'); $source_x = imagesx($source); $source_y = imagesy($source); $target = imagecreatetruecolor($source_x, $source_y); // Trying to find edges for($x = 0; $x < $source_x; $x++) { for($y = 0; $y < $source_y; $y++) { $colorAt = imagecolorsforindex($source, imagecolorat($source, $x, $y)); $colorTo = max($colorAt['red'], $colorAt['green'], $colorAt['blue']); // Wow =) imagesetpixel($target, $x, $y, imagecolorallocatealpha( $target, $colorTo, $colorTo, $colorTo, $colorAt['alpha'] )); } } imagesavealpha($target, true); header('Content-type: image/png'); imagepng($target); ?> Результат: Если поиграть с конечными байтами можно получить весьма интересный эффект:
Не могу найти, но я как-то себе делал "Scale3×" вот это полезная штука... Если у кого есть тоже выкладывайте, а то я свой код похоже потерял ...
HQ4x http://www.wiseandroid.com/image.axd?pi ... 2Fhq4x.png Весьма приятный алгоритм, только где б его на практике использовать =)