Проблема:
Эта проблема возникла из-за реальной проблемы, с которой я столкнулся. У меня настроен двойной монитор на работе, и я хотел использовать следующее изображение в качестве обоев:
Тем не менее, у моих мониторов довольно значительные рамки, и когда я устанавливаю фон, это выглядит примерно так, где появляется пирс (appiers?), Который будет сломан:
Я смог решить эту проблему, сделав изображение с вырезанным из него центром, а затем растянув его до исходного размера, как показано на рисунке ниже:
Соревнование:
Напишите программу, которая принимает изображение и «контролирует» его для использования с настройкой двойного монитора (т.е. удаляет центральную часть изображения, где находятся рамки). Правила следующие:
- Это должна быть полная программа, которая принимает изображение либо в виде пути (строковый аргумент и т. Д.), Либо в форме диалогового окна выбора файла.
- Программа должна взять в качестве входных данных количество вертикальных линий (один пиксель в ширину), чтобы обрезать от центра изображения
- Обрезка должна исходить из центра (по ширине) исходного изображения
- Результирующее изображение должно быть уменьшено до исходного размера входного изображения. (Либо половинки можно масштабировать по отдельности, а затем объединять или объединять, а затем масштабировать. Индивидуальное масштабирование дает лучшее изображение / эффект, но вряд ли заметно в реальном мире)
- Фоновые изображения, как правило, являются четными, поэтому для облегчения этой задачи входные изображения будут иметь только четное количество пикселей, а количество удаляемых строк будет также ровным.
- Это испытание кода гольф - выигрывает самый короткий код в байтах
Удачи!
code-golf
image-processing
dberm22
источник
источник
Ответы:
Октава, 85 байт
Определяет анонимную функцию с
f
именем файла иn
количеством удаляемых столбцов. Поскольку анонимная функция требует одного выражения, используется встроенное присваивание, функция, отсутствующая в MATLAB.MATLAB, 98 байт
В качестве бонуса я также сыграл в гольф MATLAB-совместимый ответ. Интересно, что это всего на 13 байт длиннее, поскольку для правильной обработки встроенных назначений в версии Octave требуется много скобок.
источник
Matlab 2013, 150 байт
Вот моя попытка в Matlab. Определенно не будет самым коротким кодом, но это только начало.
Внимание, это перезаписывает исходное изображение, поэтому сначала сделайте копию.
Гольф версия
Ungolfed Code, с улучшениями для нечетных размеров изображения и нечетного числа столбцов
источник
os
и т. Д. Для любой другой буквы в алфавите! И почему бы просто не записать изображение обратно на входное изображение,f
чтобы сохранить его целикомstrcat
? (который, кстати, вы можете заменить['',...]
вместоstrcat(...)
)Wolfram Language,
134,127,119111 байтовСоздает функцию,
f
которая принимает изображение в качестве первого ввода (в качестве символа в Mathematica или Wolfram Cloud) и целое число в качестве второго ввода.Ungolfed :
Технически, это не будет работать должным образом, если любое из размеров изображения превысит 362880 пикселей, но я предполагаю, что это нормально, так как это далеко выходит за рамки проблемы (и некоторых компьютеров).Исправлена!источник
PHP, 206 байт
принимает три аргумента командной строки: имя исходного файла, количество строк для обрезки и целевое имя файла. Беги с
-r
.Вы можете использовать
imagecopyresampled
вместоimagecopyresized
(+2 байта) для лучшего результата.ungolfed
Я мог бы сохранить еще 9 байтов, отправив результат PNG в STDOUT ... но зачем?
источник
php -r image.php image.png 1 > output.png
, верно?