Это простая задача.
Задача состоит в том, чтобы написать код, который выводит 448 * 448 квадратных изображений со 100% прозрачностью. Вывод должен соответствовать стандартным правилам изображения .
Это простая задача.
Задача состоит в том, чтобы написать код, который выводит 448 * 448 квадратных изображений со 100% прозрачностью. Вывод должен соответствовать стандартным правилам изображения .
Ответы:
convert -size 448x448 xc:none a.png
Это разрешено?
\windows\system32
).
convert
инструментом, потому что имя конфликтует с системной утилитой. Ты бежишь magick convert ...
вместо этого.
convert
является частью ImageMagick, поэтому называть его собственным языком не получится.
ImageMagick Convert
. Может быть стоит открыть мета об этом, хотя
Полная программа. Печатает массив 448 на 448 на 4, представляющий изображение 448 на 448 rgba.
448 448 4⍴0
⍴
является г eshape
448 448
?
802832p0
в качестве ответа?
f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());
Возвращает PNG-изображение, закодированное как data: URL, подходящий, например, для установки в качестве src
of HTMLImageElement
. Изменить: 3 байта сохранены благодаря @Shaggy и еще 2 байта благодаря @Arnauld.
document.createElement`canvas`
должно работать, сохраняя еще 2 байта.
d=document
вверху и заменить document
на d
? Следует сохранить ~ 5 символов.
document.write
является лишь частью фрагмента стека, а не частью функции, поэтому он все равно не считается.
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.
0-255
является допустимым значением RBGA? Я знаю, что это действительное значение RGB, но также и RGBA? Я почти никогда не использую изображения в Java, поэтому не слишком знаком с ними. Я просто основал свои 4 внутренних 0 на других ответах.
0x00000000
которые помещаются в int. Первые 2 шестнадцатеричных цифры - это альфа, следующие 2 - красные, следующие 2 - зеленые, последние 2 - синие. Так что вам нужно только целое число. См. BufferedImage.TYPE_INT_ARGB . У вас есть 4 значения, которые суммируются как одно целое число. И 0x00000000
равно 0
.
Сохранение изображения в файл с путем 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)
Попробуйте онлайн!
Спасибо Кевину за сохранение байта для второго и четвертого решений!
()->
в два из ваших ответов v->
, поскольку разрешено иметь пустой неиспользуемый ввод (для которого я лично использую Void
). Тогда ваш последний TIO будет таким .
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
.
[[[0]*4]*488]*488
С печатью:
print[[[0]*4]*488]*488
Как переменная:
x=[[[0]*4]*488]*488
Так как массив RGBA разрешен, это то, что я создал выше, по умолчанию все 0 - то есть черный, но полностью прозрачный.
[0]*802816
что также должно работать.
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]
Это действительно?
<svg height=448 width=448
Протестируйте его ( background
примените с помощью CSS, чтобы вы могли «увидеть» его)
<svg height=448 width=448
в html-файл и его открытие приводит к пустому <body>
. Тем не менее , при значении 1 байт, если вы пишете <svg height=448 width=448>
, он создает <body>
пустое изображение SVG.
>
означает, что это действительно допустимо в отношении разметки.
<!DOCTYPE html>
, <html>
, <head>
, <style>
, <script>
и все идет к <body>
. Некоторый дополнительный код необходим для получения желаемого результата. Вы можете видеть, что полученный код анализируется как <svg height="448" width="448" < body></svg>
, потому что он пишет <svg height=448 width=448 </body>
в iframe. Таким образом, я все еще верю, что это не верно.
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
a
будет работать как имя файла не так ли. Кстати , это 448 * 448 не 444 * 444 , так что это недопустимое
[255,0,0,0,0]
6272 раза ( [0,0,0,0]
128 раз, повторяется 6272 раза). Тогда тип изображения будет 10
не так 2
. даже лучше, карта цветов для кодирования с более короткой длиной прогона ( 0,0,0,0
-> 0
)
_=>(Enumerable.Repeat((0,0,0,0),200704),448,448)
Видимо, с выводом [1D array of pixels, width, height]
все в порядке, поэтому выводится кортеж `(IEnumerable из пикселей, ширины, высоты).
_=>Enumerable.Repeat(Enumerable.Repeat((0,0,0,0),448),448)
Исходная матрица, возвращающая ответ.
Поскольку правила ввода-вывода изображения разрешают вывод в виде матрицы значений RGB, эта отправка выводит матрицу значений RGBA, представленных кортежами с четырьмя значениями, причем все они равны 0.
К сожалению, 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()
команду. Тем не менее, это идиотски долго.
'<?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 байт). Автоматически отправляет изображение в браузер / стандартный вывод и все.
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
Import
.
new("LA",[448]*2).show()
26 байтов.
imwrite(nan(448),'.png','tr',1)
Создает матрицу NaN
значений 448 x 448 , а затем использует ее imwrite
для сохранения их в PNG-файле с именем '.png'
и устанавливает прозрачность на 1, делая ее прозрачной. Имя 'Transparency'
параметра может быть сокращено до 'tr'
MATLAB, позволяющего частичное совпадение строк с именами параметров, если сокращенная версия является уникальной среди доступных параметров.
{P5.img⍴∘0,⍨448}
Функция, которая выводит объект изображения, который можно нарисовать на экране (без эффекта) или преобразовать обратно в значения пикселей.
-2 спасибо нгн !
{P5.img⍴∘0,⍨448}
2¡
может быть⁺
a: make image![448x448 0.0.0.255]
Непрозрачность по умолчанию полностью непрозрачна (0)
Вот как это использовать / полная программа /:
Red [ ]
a: make image! [ 448x448 0.0.0.255 ]
view [ image a ]
º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*
_=>[w=448,w,Array(w*w).fill([0,0,0,0])]
Видимо вывод [height, width, 1d array of RGBA values]
в порядке.
-3 байта благодаря @Arnauld
[1D array of pixels, width, height]
DIM A[448,448]SAVE"DAT:I",A
Сохраняет двумерный массив 448x448, заполненный нулями, в файл с именем DAT:I
(что короче, чем определение функции, возвращающей массив, как-то)
Стандартные форматы (используемые всеми графическими функциями) для цветов в SmileBASIC: 32-битный ARGB и 16-битный 5551 RGBA, и они 0
прозрачны в обоих.
ARGB
байтовом формате (обычно используется в Smilebasic), так 0x00000000
что Alpha = 0, Red = 0, Green = 0, Blue = 0. Черный 0xFF000000
.
GRP
но я позволю ему уйти, поскольку фактические данные сохраняются одинаково.
Text"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
Base64Encode Decode
ResizeImage 448
Принимает прозрачный GIF 1x1 в кодировке base64 и изменяет его размер
♪☺ü@/ø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.
#include <SFML/Graphics.hpp>
void f(){sf::Image i;i.create(448,448);i.createMaskFromColor(sf::Color::Black);i.saveToFile("a.png");}
Нажатие «Выполнить фрагмент кода» сгенерирует прозрачный PNG 448x448 в IFRAME. Затем вы можете щелкнуть правой кнопкой мыши «Сохранить изображение как ...», чтобы загрузить его на свой компьютер.