Создайте программу или функцию, которая принимает имя файла в качестве аргумента или читает его из стандартного ввода, и выполняет следующую задачу:
- Чтение изображения из png-файла (имя указывается в качестве аргумента).
- Поменяйте цвета на этом изображении, чтобы, например, темно-зеленый (0, 75, 30) стал (255, 180, 225) (потому что 255-0 = 255, 255-75 = 180 и 255-30 = 225). Вы не должны изменять значение альфа-канала.
- Выведите это изображение в файл с именем
a.png
(в формате png) или покажите его в окне графического интерфейса.
Это код-гольф . Применяются стандартные лазейки.
code-golf
graphical-output
image-processing
Ханнес Карппила
источник
источник
Ответы:
ImageMagick
display -fx
, 371824байтаИнструмент ImageMagick
display
сfx
параметром может применить вышеуказанную программу к png, заданному в качестве параметра, и отобразить результаты на экране.Проверьте мой пост на мета о ImageMagick как язык программирования. Я написал главного тестера в качестве доказательства концепции.
Подсчет байтов,
display -fx code filename
эквивалентен томуperl -e code filename
, где мы традиционно рассчитываем толькоcode
длину.источник
Pyth,
161513 байтВыходы в
a.png
.Спасибо Якубе за 2 байта!
источник
~
или подобного)?.w-LLL255'z\a
. Но не спрашивайте меня, как это работает или зачем вам нужно,LLL
а не что-то подобноеLMM
.MATL , 10 байт
Существует пять различных подформатов PNG, в зависимости от того, как кодируется цвет. Ни один из них не кажется более «необязательным», чем другие. Я выбрал наиболее гибкий
Truecolor
, в котором каждый пиксель может иметь произвольный цвет. Приведенный выше код также поддерживаетTruecolor with alpha
игнорирование альфа-канала.Чтобы узнать цветовой подформат PNG-файла: ищите последовательность байтов
[73 72 68 82]
в начале файла; и десятый байт оттуда будет иметь одно из пяти значений в таблице, связанной выше .Как работает код
Довольно просто:
пример
Я не мог удержаться от того, чтобы увидеть себя перевернутым, поэтому я скачал это изображение (которое находится в подформате
Truecolor with alpha
), запустил код (вторая строка - ввод пользователя)и получил
источник
Ява, 295
источник
java.io.File
?import java.io.*;
, он не сохраняет байтов, но на самом деле увеличивает размер.R, 124 байта
Читает в имени файла через stdin (
readline()
).Пример ввода / вывода с использованием первого png, который я нашел на этом компьютере :)
источник
CSS, 19 байт
http://output.jsbin.com/suqayudoyu
источник
Tcl, 176 байт
Загружает PNG через
photo
тип изображения, получает данные изображения, преобразуя каждую строку и цвет, вычитая из #FFFFFF, затем записывает файл обратно на диск (как «a.png»).Для достижения наилучших результатов используйте TrueColor PNG, поскольку Tk будет пытаться использовать то же цветовое разрешение, что и данные исходного изображения.
Чтобы увидеть изображение без проблем сэмплирования, добавьте
к концу. (Очевидно, это дольше, чем опция сохранения диска.)
источник
foreach
наlmap
Mathematica, 140 байт
источник
Import[#]
наImport@#
, и то же самое дляColorCombine[Most@#]
.ColorNegate@*Import
будет полным ответом?cmd + IrfanView, 19 символов
Просто дорогая альтернатива Sparr «S ответа .
источник
Юлия,
9479 байтЭто полная программа, которая принимает имя файла в качестве аргумента командной строки и перезаписывает данный файл инвертированным изображением. Это требует, чтобы
FileIO
иImage
пакет был установлен. Последний не нужно импортировать, хотя.Вызов программы из командной строки, как
julia filename.jl /path/to/image.png
.Ungolfed:
Пример:
источник
Python + PIL, 85 байт
Это определяет анонимную функцию, которая принимает имя файла в виде строки и сохраняет результирующее изображение в
a.png
.Тестовый забег:
источник
from PIL import Image as I
последующей заменойImage
в функции:I
import Image
сработает, избавившись от целой загрузки байтовfrom PIL.Image import*
eval
функция работает против всех «полос», включая альфа. Вот то , что я получаю , когда инвертирующий логотип Firefox - imgur.com/a/wV3MSQXC + stb_image + stb_image_write,
175162 байта (или + 72 =247234)Моя первая публикация на этом сайте.
Возможно, сбрил бы несколько байтов. Нужно,
stb_*
чтобы реализация находилась либо в отдельной библиотеке, либо в начале этого файла с помощью:Я не включил его в счетчик, потому что он по сути является частью библиотеки (особенно если он скомпилирован отдельно). +72 байта, чтобы добавить это, если требуется, однако.
Обновление 1:
Реализована только функция (в отличие от целой программы) приемлемая, сбрасывающая 15 байт. Старая реализация (это целая программа), для справки:
источник
Java,
300298 байтисточник
MATLAB / Octave, 31 байт
Код:
Пример:
Объяснение:
Прочитайте изображение
x
из графического файла, дополните изображение и затем отобразите изображение.источник
x
это предопределено, что недопустимо. Вы можете превратить его в лямбда-функцию на +4 байта с помощью@(x)
.FFmpeg, 10 байт
Редактировать: принимая реплику от ответа @ Спарра
(вышеупомянутое, когда передано ffplay вместе с именем изображения, отобразит изображение с отрицанием)
Вышеуказанное сохраняется как командный файл.
источник
Ракетка 282 байта
Более читаемая форма:
Использование:
источник
Голанг, 311 байт
ungolfed
источник
Python 2 + OpenCV , 55 байт
Библиотека OpenCV использует массивы NumPy для чтения, обработки и записи изображений. Ниже приведен пример того, как этот скрипт инвертирует изображение, найденное на mozilla.org .
Все каналы, включая альфа-канал, будут инвертированы. Это проблематично для изображений с прозрачностью. Но, как указал @Mego, поддержка альфа-канала не является обязательной.
Ниже приведена 82-байтовая закомментированная версия, которая обрабатывает альфа-канал.
Как показано ниже, это правильно обрабатывает инвертирование логотипа Firefox при сохранении прозрачного фона.
источник