Вызов:
Возьмите ввод двух черно-белых (монохромных) изображений и сделайте xor каждого пикселя первого, каждого пикселя второго, добавьте их к новому изображению и выведите новое изображение.
Некоторые уточнения:
Размер картинок не имеет значения. Расширение / Формат изображения не имеет значения. Вы можете заставить его принимать любое расширение и выводить любое расширение, если оно используется для хранения цифровых изображений. Вы также можете использовать графику, чтобы нарисовать вывод, например: изображение, если хотите. В противном случае сохраните вывод как файл. Входные данные могут быть приняты в качестве пути к изображению или URL.
Одна вещь, которую вы не можете сделать, однако, это массивы ввода / вывода, например. триплетов (R, G, B).
НЕ вмешиваться в альфа . Он не должен быть заштрихован, он должен быть 255 (максимальное значение) для каждого пикселя.
Что вы имеете в виду x или каждый пиксель?
Вам не нужно делать это таким образом, но один из способов xor двух пикселей состоит в том, чтобы взять их значения RGB и xor R1 с R2, G1 с G2, B1 с B2, и взять результат, который является вашим новым цветом
Поскольку у нас есть только два цвета, очевидно, что при одинаковых цветах результат будет (0,0,0), а когда они различаются (в этом случае белый - 255,255,255 и черный - 0,0,0), результат будет быть 255,255,255.
Таким образом, когда два пикселя различаются, в результате получается белый пиксель, иначе черный пиксель
Пример ввода / вывода:
Вход 1: Вход 2:
Выход:
Это код-гольф, поэтому выигрывает самый короткий код.
источник
Ответы:
Язык выражения Fx (ImageMagick),
84 байтаредактирует
u!=v
-4 байтаПоскольку «Язык выражений Fx», по-видимому, завершен по Тьюрингу, я перепрофилировал свой ответ на него (был Unix Shell + Image Magick).
Golfed
Fx не поддерживает ни побитовое XOR, ни побитовое НЕ , поэтому я использовал
!=
вместо этого (что прекрасно работает для чистых изображений BW).Ввод и вывод неявны (контролируются интерпретатором).
использование
Утилита преобразования ImageMagick , при вызове которой используется интерпретатор «Язык выражений Fx»
-fx
, как показано ниже:Аргументы:
Образец вывода
источник
Mathematica,
373415 байтСпасибо Яну Миллеру за сокращение количества байтов более чем наполовину!
В конце концов, всегда есть встроенный. Эта функция принимает два изображения на вход и выводит изображение; он делает что-то более сложное для цветных изображений, но для черно-белых это точно XOR.
Предыдущие представления:
Спасибо JungHwan Min за сохранение 3 байта!
Безымянная функция, которая принимает упорядоченную пару изображений (совместимых размеров) в качестве входных данных и возвращает отображаемое изображение.
ImageData
получает только пиксельные данные без всех оболочек / метаданных; к сожалению, он возвращает действительные числа, поэтомуChop
он необходим для обработки их как целых чиселBitXor
выполняет в точности то, что говорит на жесте (и перебирает вложенные списки), иImage
превращает полученный RGB обратно в изображение.Исходная отправка, в которую входила упорядоченная пара URL или имен файлов:
источник
ImageDifference[#,#2]&
Java,
336335328 байтUngolfed:
источник
String[] y
. Просто небольшой маленький гольф.public
из,public class M
чтобы сохранить 7 байтов.png
не должно быть необходимымPython,
646057 байтЯ новичок в гольф, так что помилуй!
Спасибо @Blender и @FlipTack за то, что сэкономили мне 7 байт!
источник
from cv2 import*
должно сбрить 4 символа.d=
:), выполнениеr=imread
и последующее использованиеr
дважды может быть корочеОктава,
433834 байтаБлагодаря flawr сэкономил мне 5 байт.
Благодаря Луису Мендо сэкономил мне 4 байта, которые предложили использовать
a~=b
вместоxor(a,b)
.Функция, которая принимает в качестве имени входного файла два входных изображения
a,b
и показывает результат.Предыдущий ответ, который пишет в файл:
Функция, которая принимает в качестве имени входного файла два входных изображения
a,b
и имя файла выходного изображенияc
.Использование:
Результат сохраняется в
out.png
источник
imshow()
вместоimwrite()
?imread(a)~=imread(b)
(или+(imread(a)~=imread(b))
если логический ввод не разрешенimshow
) вместоxor(...)
?JavaScript (ES6),
333320308299297 байт-
1220 байтов, сохраненных Исмаэлем Мигелем- 2 байта, сохраненных пользователем2428118
Ожидает уже загруженные изображения, принимает первый размер ввода в качестве выходного размера и возвращает элемент холста.
Ungolfed
Ps: Первый раз в код-гольфе, так что, возможно, в него можно играть больше, и мой счет может быть ошибочным
PPs: контекст 2D холста имеет
xor
[режим композитинга ( https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation ), но он работает с альфа-значениями ...Может быть еще дальше (251 байт) с фиксированным размером 300 * 150 пикселей (все остальное черное), как в ответе Обработка
Показать фрагмент кода
источник
c
наc=i=>{with(document.createElement('canvas')){width=i.width,height=i.height;return getContext`2d`}}
и вы сэкономите 16 байт.xor
черный прямоугольник надxor
двумя изображениями, чтобы вернуться к 255 альфа?with
но, кажется, довольно хорош для игры в гольф ;-) Кроме того, забыл, что шаблонный литерал сохраняет 2 байта ...(i,j)=>{c=i=>{with(document.createElement(C='canvas')){width=i.width,height=i.height;return getContext`2d`}},g=i=>{x=c(i);x.drawImage(i,0,0);return x.getImageData(0,0,i.width,i.height)},a=g(i),b=g(j).data,d=a.data,r=c(i);d.forEach((e,i)=>{d[i]=i%4>2?255:e^b[i]});r.putImageData(a,0,0);return r[C]}
Обработка
124118117 байтИспользование:
Ungolfed
источник
MATL , 10 байт
объяснение
Это в основном тот же ответ, что и в существующем решении Octave : он принимает имена файлов или URL-адреса обоих изображений в качестве входных данных и отображает результат на экране.
использование
источник
Perl, 260 байт
251 байт кода + 9 байт для
-MImager
.Я не уверен, что Perl - лучший язык для этой задачи, но я хотел бы знать, каков был образ комментария @ orlp. И это заставляет меня использовать немного графических модулей, это хорошо. И мне понравилось это кодировать!
Более читаемая версия:
Вам нужно будет установить Imager, если вы хотите попробовать его, но это довольно просто: просто запустите
(echo y;echo) | perl -MCPAN -e 'install Imager'
в своем терминале.источник
LÖVE2D , 199 байт
Достаточно просто, берет два файла изображения в командной строке, выводит файл с именем «Z» в каталог Love. Также работает для полноцветных изображений!
источник
J 54 байта
Принимает два аргумента, где каждый является путем к входному изображению в
bmp
формате. Каждое изображение читается как матрица из 24-битных целых RGB-значений и анализируется в триплет из 8-битных значений RGB, берется знак каждого из них, и две матрицы вместе обрабатываются в XOR. Затем результат масштабируется на 255, преобразуется обратно из триплета из базовых 256 чисел в целое число и записывается в выходнойbmp
файл с именемo
.источник
C 189 байт
Работает на изображениях PBM. Вызов
f(a, b, out)
с именами как входных файлов, так и выходного файла.Предположения:
Оба заголовка входного изображения идентичны (включая пробелы) и содержат меньше
9 * sizeof(int)
символов.У нас хорошая ОС, которая сбрасывает и закрывает пропущенные файлы.
EOF == -1
Развернул и объяснил: (обратная косая черта опущена)
C (изгиб спецификации), 149 байтов
Все еще использует файлы PBM, но сейчас:
Изображение должно иметь высоту один пиксель и ширину 8 пикселей или менее, поскольку PBM упаковывает 8 байтов в байт.
Заголовок должен быть 7 байтов (например,
P4 8 1
с завершающим пробелом).Оба файла ищутся вперед при заполнении
t
их заголовка, затем последние байты читаются, xor'd и записываются обратно. Использует преимуществаfread
иfwrite
наличие аналогичных списков параметров для учета всех трех операций над заголовком за одним и тем же макросом.источник
R, 45 байт
a
иb
представляют имена файлов двух файлов изображений.Пример:
Выход:
источник
Обработка, 82 байта
Нарушения Обработка обширных функций рисования, чтобы фактически не выполнять XORing. Смешивает два изображения вместе с
DIFFERENCE
режимом и рисует их на экране.использование
Ungolfed
источник
32
вместоDIFFERENCE
. Это был бы хороший совет для игры в гольф: codegolf.stackexchange.com/questions/26809/… :)C #, 233 байта
Спасибо Unknown6656 за подсказку, что аргументы командной строки не нужны. Теперь программа читает из файлов «a» и «b» и записывает в файл «c» в том же формате, что и «a». Отключена одна ошибка исправлена тоже.
Он устанавливает каждый пиксель в черный цвет, если цвет тот же, в противном случае белый.
Чтобы сохранить байты, он перехватывает исключения за пределами границ, а не проверяет свойства ширины и высоты растровых изображений. Каждый раз, когда x выходит за пределы, он сбрасывается в 0, а y увеличивается. Когда у выходит за границы, х равен 0, и цикл прерывается, чтобы сохранить изображение и выйти.
Пример компиляции с использованием csc и запуск с использованием mono:
источник
(string[] v)
в главном объявлении, так как C # явно не нужен для запуска приложенияClojure, 300 байт
Явный грабеж Java-ответа . Я не знал, как справиться с этой задачей, но мне было любопытно, насколько хорошо Java-решение перешло на Clojure. Это было довольно просто. Код без гольфа на самом деле довольно симпатичный.
Это был первый вызов, который я предпринял, используя импорт. Вероятно, есть способ оптимизировать их, чтобы сэкономить несколько байтов.
Ungolfed:
источник
PHP,
246243 байтаЯ, вероятно, могу сыграть в гольф больше.
Запустите его из командной строки следующим образом:
источник
$i=imagecreatefrompng;$a=$i($argv[1])
на один байт длиннее, чем$a=($i=imagecreatefrompng)($argv[1])
. И вы можете попробовать палитру изображений с двухцветной палитрой.($f=func)(params)
требует PHP 7.for(;$k<$w*$h;)
наfor(;$y<$h;$y+=1/$w)
,$x=$k%$w, $y=$k++/$w
с$x, $y
и последний$x
на$x++
. (при условии отсутствия ошибок округления для любых разумных размеров изображения)Node.js,
156135 байтВходные и выходные файлы изображений должны быть в формате PBM (P1), где первая строка
P1 [width] [height]
, а вторая строка - это черно-белые значения ascii без пробелов.Вот входные изображения, за которыми следует вывод xor (32x32 пикселей):
источник