Сделать прозрачное изображение 448 * 448


10

Это простая задача.

Задача состоит в том, чтобы написать код, который выводит 448 * 448 квадратных изображений со 100% прозрачностью. Вывод должен соответствовать стандартным правилам изображения .


7
Что мешает людям отправлять 0-байтовый ответ, который «выводит» прозрачное (невидимое) изображение на экран?
12Me21

9
@ 12Me21 Это будет 448 * 448?
Ануш

2
Является ли это пародией (или, по крайней мере, вдохновленной) закрытым вопросом о стекловании потока?
Foon

2
Что особенного в 448 px?
dan04

1
@Foon Определенно не пародия, но, конечно, мне было интересно спросить о SO, прежде чем понять, что здесь будет гораздо веселее.
Anush

Ответы:


28

Имиджмагик в какой-то оболочке, 35

convert -size 448x448 xc:none a.png

Это разрешено?


5
Баш, наверное? Это то, что я использовал, когда я проверял это. Любая оболочка POSIX должна работать?
Витявв

3
Работает также в Windows (если ImageMagick ранее находился в PATH \windows\system32).
кл.

1
В Windows ImageMagick не поставляется с convertинструментом, потому что имя конфликтует с системной утилитой. Ты бежишь magick convert ... вместо этого.
n0rd

1
@SztupY convertявляется частью ImageMagick, поэтому называть его собственным языком не получится.
витявв

1
это собственная команда. Вы можете просто сказать, что вы используете язык ImageMagick Convert. Может быть стоит открыть мета об этом, хотя
SztupY

15

APL (Dyalog Unicode) , 11 байтов SBCS

Полная программа. Печатает массив 448 на 448 на 4, представляющий изображение 448 на 448 rgba.

448 448 40

Попробуйте онлайн!

является г eshape


Я вообще не знаю APL, но думаю, у него нет дубликата для игры в гольф 448 448?
Кевин Круйссен

448 * 448 = 200704, поэтому не можете ли вы заменить пробел 448 448 на 200704, сэкономив 1 байт?
NaCl

1
@NaCl В таком случае, почему бы просто не умножить это на 4 и получить 802832p0в качестве ответа?
Джон Гамильтон

@NaCl Потому что это не один из допустимых форматов изображений в соответствии с правилами по умолчанию .
Адам

@JohnHamilton По той же причине, что и мой ответ на NaCl .
Адам

8

Go, 70

import i"image";func a()i.Image{return i.NewRGBA(i.Rect(0,0,448,448))}

Никогда не видел гольф в Go раньше. Определяет функцию, которая выводит изображение


2
Назовите это Go-lf.
Скайлер

6

JavaScript (ES6), 74 69 байт

f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());

Возвращает PNG-изображение, закодированное как data: URL, подходящий, например, для установки в качестве srcof HTMLImageElement. Изменить: 3 байта сохранены благодаря @Shaggy и еще 2 байта благодаря @Arnauld.



2
document.createElement`canvas` должно работать, сохраняя еще 2 байта.
Арно

1
Если createelement действителен, будет ли допустимо видеть document.body и использовать тот факт, что id становится переменной? Также составьте фрагмент PLS
только ASCII

1
Не могли бы вы добавить что-то вроде d=documentвверху и заменить documentна d? Следует сохранить ~ 5 символов.
Люк

1
@Luke The document.writeявляется лишь частью фрагмента стека, а не частью функции, поэтому он все равно не считается.
Нил

6

Java 8, 23 (или 20) байтов

v->new int[448][448][4]

Возвращает трехмерный массив 448x448x4 0 с.

Попробуйте онлайн.

Объяснение:

v->  // Method with empty unused parameter and 3D integer-array as return-type
  new int[448][448][4]
     // Create a 3D array of dimensions 448 by 448 by 4 (filled with 0s by default)

v->new int[448][448]

Возвращает 448x448 матрицу 0 с.

В Java значения RGBA могут быть представлены целым числом . Шестнадцатеричное 0x00000000будет представлять 00для красного, зеленого, синего и альфа соответственно. И 0x00000000равно целому числу 0.

Попробуйте онлайн.


Ах, ах, любите это :-) Разве это не работает просто v->new int[448][448]? Потому что цвет может быть представлен с помощью целого числа (RGBA) в Java.
Оливье Грегуар

@ OlivierGrégoire Нет, мне нужны четыре 0 на 448x448 пикселей для значений RBGA. РЕДАКТИРОВАТЬ: Хм .. это целое число 0-255является допустимым значением RBGA? Я знаю, что это действительное значение RGB, но также и RGBA? Я почти никогда не использую изображения в Java, поэтому не слишком знаком с ними. Я просто основал свои 4 внутренних 0 на других ответах.
Кевин Круйссен

Да, четыре 0 как (в шестнадцатеричном), 0x00000000которые помещаются в int. Первые 2 шестнадцатеричных цифры - это альфа, следующие 2 - красные, следующие 2 - зеленые, последние 2 - синие. Так что вам нужно только целое число. См. BufferedImage.TYPE_INT_ARGB . У вас есть 4 значения, которые суммируются как одно целое число. И 0x00000000равно 0.
Оливье Грегуар

Я думаю, что это первый раз за ~ 2 года, когда я видел, что Java действительно конкурентоспособна!
Лохматый

@Shaggy С этими языками игры в гольф это все еще не так конкурентоспособно. Кроме того, у меня было несколько других полуконкурентных ответов на Java в прошлом, таких как этот , или этот, который выигрывал, пока не появился Bash (и R играл в гольф его ответ).
Кевин Круйссен

6

Java 8


Сохранение изображения в файл с путем s, 101 байт

s->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",new java.io.File(s))

Попробуйте онлайн ... как-то

Возврат BufferedImage, 46 байтов

v->new java.awt.image.BufferedImage(448,448,2)

Сохранение изображения в файл f, 83 байта

f->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",f)

Сброс PNG в STDOUT, 92 байта (спасибо только ASCII!)

v->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",System.out)

Попробуйте онлайн!
Спасибо Кевину за сохранение байта для второго и четвертого решений!


2
Вы имеете в виду пустой или прозрачный?
Ануш

1
Просто напишите на стандартный вывод
только ASCII

1
@ ASCII-only Итак, записать пустой (заполненный нулями) массив 448 * 448 * 4 в стандартный вывод? В любом случае мне нравится идея создания фактического файла PNG.
Бенджамин Уркхарт

1
Вы можете сыграть ()->в два из ваших ответов v->, поскольку разрешено иметь пустой неиспользуемый ввод (для которого я лично использую Void). Тогда ваш последний TIO будет таким .
Кевин Круйссен

1
@NahuelFouilleul, потому что я хочу вывести реальное изображение, а не попиксельное представление одного
Бенджамин Уркхарт

6

05AB1E , 12 10 9 байт

448LDδ4Å0

Попробуйте онлайн.

или альтернативно:

¾4Ž1ÂDиии

Попробуйте онлайн.

-2 байта благодаря @Emigna .
-1 байт благодаря @Adnan .

Выводит 448x448x4 3D-список 0 с.

Объяснение:

448LD      # Push a list in the range [1,448], and duplicate it
     δ     # Outer product; apply the following double-vectorized:
      4Å0  #  Push a list of 4 0s: [0,0,0,0]
           # (and output the result implicitly)

  Ž1ÂD     # Push compressed integer 448, and duplicate it
      и    # Create a list of 448 times 448
 4     и   # Transform it into a list of 448 times 448 times 4
¾       и  # Transform it into a list of 448 times 448 times 4 times 0
           # (and output the result implicitly)

Смотрите этот 05AB1E ответ моего (раздел Как сжать большие целые числа? ) , Чтобы понять , почему Ž1Âэто 448.


5

Обработка, 66 байт

PGraphics g=createGraphics(448,448);g.beginDraw();g.save("a.png");

5

Python 2,7, 17 байт (22 с печатью)

[[[0]*4]*488]*488

С печатью:

print[[[0]*4]*488]*488

Как переменная:

x=[[[0]*4]*488]*488

Так как массив RGBA разрешен, это то, что я создал выше, по умолчанию все 0 - то есть черный, но полностью прозрачный.

Попробуйте онлайн!


Опять же, с этим, просто умножьте вручную, и вы получите, [0]*802816что также должно работать.
Джон Гамильтон

1
@JohnHamilton Исправьте меня, если я ошибаюсь, но я верю, что это должен быть трехмерный массив (массив строк пикселей), то есть массив [пиксель х координат] [пиксель у координат] [r / g / b / а)
Диспенсер для

1
Не совсем так кратко, но есть альтернатива, которая переводит нули в массив NumPy ... np.zeros ([4] + [448] * 2)
P. Hopkinson

5

Желе , 8 байт

448ṁ4¬¥þ

Ссылка niladic, которая дает массив прозрачных черных пикселей 448 на 448 RGBA.

Попробуйте онлайн!

Как?

448ṁ4¬¥þ - Link: no arguments
448      - 448
       þ - outer-product with: -- i.e. [[f(x,y) for y in [1..448]] for x in [1..448]]
      ¥  -   last two links as a dyad:
   ṁ4    -     mould like [1,2,3,4]  -- e.g. x=7 -> [7,7,7,7]
     ¬   -     logical NOT                       -> [0,0,0,0]

5

HTML, 25 байт

Это действительно?

<svg height=448 width=448

Протестируйте его ( backgroundпримените с помощью CSS, чтобы вы могли «увидеть» его)


Я не верю, что это действительно так, так как запись <svg height=448 width=448в html-файл и его открытие приводит к пустому <body>. Тем не менее , при значении 1 байт, если вы пишете <svg height=448 width=448>, он создает <body>пустое изображение SVG.
Исмаэль Мигель

@IsmaelMiguel, мы определяем языки по их интерпретатору, а не по их (предполагаемой) реализации. То, что существует интерпретатор (в данном случае CodePen), который позволяет нам опускать закрывающее значение, >означает, что это действительно допустимо в отношении разметки.
Лохматый

1
Codepen добавляет дополнительный HTML-код, чтобы он работал. Он добавляет <!DOCTYPE html>, <html>, <head>, <style>, <script>и все идет к <body>. Некоторый дополнительный код необходим для получения желаемого результата. Вы можете видеть, что полученный код анализируется как <svg height="448" width="448" < body></svg>, потому что он пишет <svg height=448 width=448 </body>в iframe. Таким образом, я все еще верю, что это не верно.
Исмаэль Мигель


5

Ржавчина - 206 201 168 байт

use std::{io::Write,fs::File};fn main(){let mut v=vec![0,0,2,0,0,0,0,0,0,0,0,0,192,1,192,1,32,0];v.extend(vec![0u8;802816]);File::create("o.tga").unwrap().write(&v);}

При этом записывается фактический читаемый файл o.tga без каких-либо библиотек или встроенных функций с использованием двоичного формата TGA в соответствии с http://paulbourke.net/dataformats/tga/ путем жесткого кодирования ширины и высоты в заголовке двоичного файла.


-5 байт сокращают имя файла, исправляют размер img, @ ASCII-only


нужно ли его печатать в файл, хотя: P
ASCII-only

это даже должно быть 2-мерным? Я мог бы просто сказать [0; 444 * 444 * 4]; и сказать, что я создал прозрачное изображение 444x444. я делаю это интересным.
Дон

ну и aбудет работать как имя файла не так ли. Кстати , это 448 * 448 не 444 * 444 , так что это недопустимое
ASCII-только

Ой, ха-ха, спасибо
Дон

чтобы сделать его еще более интересным, запишите его длину кодирования: P (данные изображения должны быть [255,0,0,0,0]6272 раза ( [0,0,0,0]128 раз, повторяется 6272 раза). Тогда тип изображения будет 10не так 2. даже лучше, карта цветов для кодирования с более короткой длиной прогона ( 0,0,0,0-> 0)
ASCII-только

4

C # (интерактивный компилятор Visual C #) , 48 байт

_=>(Enumerable.Repeat((0,0,0,0),200704),448,448)

Видимо, с выводом [1D array of pixels, width, height]все в порядке, поэтому выводится кортеж `(IEnumerable из пикселей, ширины, высоты).

Попробуйте онлайн!

C # (интерактивный компилятор Visual C #) , 58 байт

_=>Enumerable.Repeat(Enumerable.Repeat((0,0,0,0),448),448)

Исходная матрица, возвращающая ответ.

Поскольку правила ввода-вывода изображения разрешают вывод в виде матрицы значений RGB, эта отправка выводит матрицу значений RGBA, представленных кортежами с четырьмя значениями, причем все они равны 0.

Попробуйте онлайн!


4

PHP, 192 байта

К сожалению, PHP как бы отстой в этом аспекте, потому что он требует много кода. Но опять же, где PHP не сосет.

$i=imagecreatetruecolor(448,448);imagesavealpha($i,true);$b=imagecolorallocatealpha($i,0,0,0,127);imagefill($i,0,0,$b);imagepng($i,'i.png');header('Content-type: image/png');readfile('i.png');

Ungolfed:

$i=imagecreatetruecolor(448,448);         // Create a new image with a set width
imagesavealpha($i,true);                  // Tell PHP to save alphachannels on that image
$b=imagecolorallocatealpha($i,0,0,0,127); // set the actual transparency values
imagefill($i,0,0,$b);                     // Fill the image with the color saved above
imagepng($i,'i.png');                     // Save the file as PNG
header('Content-type: image/png');        // Set the content type for the browser
readfile('i.png');                        // Read the file and output it

Очевидно, что если вы просто хотите создать его без вывода его можно опустить header()и readfile()команду. Тем не менее, это идиотски долго.


1
с положительной стороны, это один из самых «читаемых» ответов, который точно указывает на то, что он делает,
Дон

@donbright Не совсем так. ; P Тем не менее, в PHP нет другого способа сделать это, если только я не повторю какой-то HTML.
НЕТ РАБОТЫ

@YUNOWORK По правилам вы можете экспортировать массив. Вы можете использовать '<?php return '.var_export(array_fill(0,952576,0),1).';';для экспорта массива в исполняемом виде. вы можете сделать php -f image.php > array.php, а где-то еще вы можете сделать, $array = include('array.php');чтобы снова иметь пригодный для использования массив. Но я не знаю, если это действительно так, поэтому я даю это вам, чтобы добавить в качестве альтернативы. Или даже <?=json_encode(array_fill(0,952576,0));.
Исмаэль Мигель

Кстати, trueможно заменить на 1, чтобы сохранить 3 байта. Читая документацию imagepng(), вы можете просто сделать header('Content-type: image/png');imagepng($i);. Я считаю , что вы также можете заменить $b=imagecolorallocatealpha($i,0,0,0,127);imagefill($i,0,0,$b);с imagefill($i,0,0,imagecolorallocatealpha($i,0,0,0,127));но не цитируйте меня на этом.
Исмаэль Мигель

Я только что проверил и <? imagecolorallocatealpha($i=imagecreate(448,448),0,0,0,127);header('Content-type: image/png');imagepng($i);выдает прозрачное изображение (109 байт). Автоматически отправляет изображение в браузер / стандартный вывод и все.
Исмаэль Мигель

4

Python 3.7 - импортировано PIL, 30 байт

Image.new("LA",[448]*2).show()

Это требует импорта, но имеет преимущество создания и отображения фактического файла изображения, а не абстрактного пустого массива.

Объяснение:

from PIL import Image
Image.new(    // create a new image
mode="LA"     // select LA colour mode, this is grey-scale plus an alpha channel
size=[448]*2  // size argument needs to be a 2D tuple, [448*2] is a better golf shot than (448,448)
color=0       // populates the image with the specified colour, helpfully preset to transparent
).show()      // display the image object

Image.show () откроет изображение в вашей графической программе по умолчанию. В моем случае это открывает временный растровый файл в Windows Photo Viewer, но результаты могут отличаться. Возможно, это обман, так как растровое представление не содержит прозрачности

Вариации ...

Image.new("LA",[448]*2)                 // 24 bytes but doesn't open image
Image.new("LA",[448]*2).show()          // 30 bytes, shows you a bitmap
Image.new("LA",[448]*2).save("x.png")   // 37 bytes, saves image to disk

1
Если вы не учитываете ваш импорт, вы должны указать свой язык как Python 3.7 - импортированный PIL или что-то подобное. Кроме того, в вашем объяснении вы извлекаете выгоду Import.
Джонатан Фрех

Спасибо, исправлено. Должен ли я дать свой ответ в виде 24 байтов, 30 или 37?
П. Хопкинсон

Количество байтов зависит от языка, который вы используете. На данный момент ваше представление занимает 30 байтов на языке Python 3 с импортированным PIL . Если бы вы написали в Python 3 , это, скорее всего, будет дольше. Конечно, если вы используете язык Python 3 со всем импортированным пространством имен PIL , ваш ответ будет new("LA",[448]*2).show()26 байтов.
Джонатан Фрех

Большое спасибо за отправку кода, который я могу запустить и который выдает результат, который я могу проверить!
Ануш

4

MATLAB, 31 байт

imwrite(nan(448),'.png','tr',1)

Создает матрицу NaNзначений 448 x 448 , а затем использует ее imwriteдля сохранения их в PNG-файле с именем '.png'и устанавливает прозрачность на 1, делая ее прозрачной. Имя 'Transparency'параметра может быть сокращено до 'tr'MATLAB, позволяющего частичное совпадение строк с именами параметров, если сокращенная версия является уникальной среди доступных параметров.


подожди, почему 443 ??
Только для ASCII

@ ASCII-только
жирные

О_о, это был безумно быстрый ответ
только ASCII

4

Дзайма / APL + APLP5 , 18 16 байт

{P5.img⍴∘0,⍨448}

Функция, которая выводит объект изображения, который можно нарисовать на экране (без эффекта) или преобразовать обратно в значения пикселей.

-2 спасибо нгн !


это будет работать? {P5.img⍴∘0,⍨448}
нг

@ngn это действительно так, спасибо!
Дзайма


3

Красный , 33 байта

a: make image![448x448 0.0.0.255]

Непрозрачность по умолчанию полностью непрозрачна (0)

Вот как это использовать / полная программа /:

Red [ ]
a: make image! [ 448x448 0.0.0.255 ]
view [ image a ]

3

MathGolf , 10 байт

º4♦7*_ß{.a

Попробуйте онлайн!

объяснение

º            push [0]
 4           push 4
  ♦7*        push 64*7=448
     _       duplicate TOS
      ß      wrap last three elements in array (stack is now [[0], [4, 448, 448]])
       {     foreach in [4, 448, 448]
        .    repeat TOS x times
         a   wrap TOS in array

Этот метод экономит 1 байт по сравнению со «стандартным» ♦7*_4º*a*a*


3

JavaScript (Node.js) , 39 байт

_=>[w=448,w,Array(w*w).fill([0,0,0,0])]

Видимо вывод [height, width, 1d array of RGBA values]в порядке.

Попробуйте онлайн!

-3 байта благодаря @Arnauld


неверно ... это список строк
только ASCII

Также вы можете вывести[1D array of pixels, width, height]
только ASCII

@ ASCII-only Исправлено сейчас
Воплощение невежества

41 байт или 39 байт, если мы можем вывести [width, height, array].
Арно

3

SmileBASIC, 27 байтов

DIM A[448,448]SAVE"DAT:I",A

Сохраняет двумерный массив 448x448, заполненный нулями, в файл с именем DAT:I (что короче, чем определение функции, возвращающей массив, как-то)

Стандартные форматы (используемые всеми графическими функциями) для цветов в SmileBASIC: 32-битный ARGB и 16-битный 5551 RGBA, и они 0прозрачны в обоих.


Что делает это прозрачным вместо черного?
труба

1
Цвета представлены в 4- ARGBбайтовом формате (обычно используется в Smilebasic), так 0x00000000что Alpha = 0, Red = 0, Green = 0, Blue = 0. Черный 0xFF000000.
12Me21

слава SmileBasic за использование формата изображения RAW lol
don bright

Я бы пожаловался на техническую природу, что это не формат изображения, поскольку это не так, GRPно я позволю ему уйти, поскольку фактические данные сохраняются одинаково.
улитка

@snail_ Это просто вывод матрицы пикселей, без использования определенного формата изображения.
12Me21

3

Ярлыки ScPL для iOS , 98 байт

Text"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
Base64Encode Decode
ResizeImage 448

Скриншот

Ярлык iCloud Link

Принимает прозрачный GIF 1x1 в кодировке base64 и изменяет его размер


это было ... странно ... что за ссылка icloud я только что пошел? ?
Дон

@donbright, когда вы делитесь ярлыком из приложения ярлыков, он делает эту ссылку
pfg

2

JSTX , 24 байта

♪☺ü@/øP♦£Q)%)£Q◄úæD)%)£Q

объяснение

♪☺ü@ # Push literal 448
/    # Store the first stack value in the a register.
ø    # Push literal 0
P    # Push four copies of the first stack value.
♦    # Push literal 4
£Q   # Push stack values into a list of the size of the first stack value starting with the second stack value.
)    # Push the value contained in the a register.
%    # Push the second stack value the absolute value of the first stack value times.
)    # Push the value contained in the a register.
£Q   # Push stack values into a list of the size of the first stack value starting with the second stack value.
◄úæ  # Push literal \n
D    # Push the sum of the second and first stack values.
)    # Push the value contained in the a register.
%    # Push the second stack value the absolute value of the first stack value times.
)    # Push the value contained in the a register.
£Q   # Push stack values into a list of the size of the first stack value starting with the second stack value.

Попробуйте онлайн!




2

C ++, SFML, 131 байт

#include <SFML/Graphics.hpp>
void f(){sf::Image i;i.create(448,448);i.createMaskFromColor(sf::Color::Black);i.saveToFile("a.png");}

2

JavaScript + HTML, 56 байт

location=C.toDataURL()
<canvas id=C width=448 height=448>

Нажатие «Выполнить фрагмент кода» сгенерирует прозрачный PNG 448x448 в IFRAME. Затем вы можете щелкнуть правой кнопкой мыши «Сохранить изображение как ...», чтобы загрузить его на свой компьютер.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.