Este é um desafio simples.
A tarefa é escrever um código que produza uma imagem quadrada 448 * 448 com 100% de transparência. A saída deve seguir as regras de imagem padrão .
Este é um desafio simples.
A tarefa é escrever um código que produza uma imagem quadrada 448 * 448 com 100% de transparência. A saída deve seguir as regras de imagem padrão .
Respostas:
convert -size 448x448 xc:none a.png
Isso é permitido?
\windows\system32
).
convert
ferramenta, porque o nome entra em conflito com o utilitário do sistema. Você corre magick convert ...
em seu lugar.
convert
faz parte do ImageMagick, portanto chamá-lo de seu próprio idioma não funcionaria.
ImageMagick Convert
. Pode valer a pena abrir uma meta sobre ele embora
Programa completo. Imprime uma matriz de 448 x 448 x 4 representando uma imagem rgba de 448 x 448.
448 448 4⍴0
⍴
é r eshape
448 448
?
802832p0
como resposta?
f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());
Retorna uma imagem PNG codificada como dados: URL adequado, por exemplo, para definir como o src
de um HTMLImageElement
. Editar: salvou 3 bytes graças a @Shaggy e mais 2 bytes graças a @Arnauld.
document.createElement`canvas`
deve funcionar, economizando mais 2 bytes.
d=document
no topo e substituir document
por d
? Deve salvar ~ 5 caracteres.
document.write
é apenas parte do snippet da pilha, não parte da função, portanto não conta de qualquer maneira.
v->new int[448][448][4]
Retorna uma matriz 3D de 448x448x4 0s.
Explicação:
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]
Retorna uma matriz de 448x448 de 0s.
Em Java, os valores RGBA podem ser representados por um número inteiro . O hexadecimal 0x00000000
representaria 00
para vermelho, verde, azul e alfa, respectivamente. E 0x00000000
é igual ao número inteiro 0
.
v->new int[448][448]
? Porque uma cor pode ser representada com um número inteiro (RGBA) em Java.
0-255
um valor RBGA válido? Eu sei que é um valor RGB válido, mas também RGBA? Eu quase nunca uso imagens em Java, então não estou muito familiarizado com elas. Simplesmente baseei meus 4 0s internos em outras respostas.
0x00000000
que se encaixam em um int. Os 2 primeiros dígitos hexadecimais são Alfa, os 2 seguintes são vermelhos, os 2 seguintes são verdes, os 2 finais são azuis. Portanto, você só precisa de um número inteiro. Consulte BufferedImage.TYPE_INT_ARGB . Você tem 4 valores, resumidos como um número inteiro. E 0x00000000
é igual a 0
.
Salvando a imagem em um arquivo com caminho s
, 101 bytes
s->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",new java.io.File(s))
Experimente online ... de alguma forma
Retornando a BufferedImage, 46 bytes
v->new java.awt.image.BufferedImage(448,448,2)
Salvando a imagem no arquivo f
, 83 bytes
f->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",f)
Despejo de PNG para STDOUT, 92 bytes (graças apenas ao ASCII!)
v->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",System.out)
Experimente online!
Agradecemos a Kevin por salvar um byte para a segunda e quarta soluções!
()->
em duas de suas respostas v->
, já que é permitido ter uma entrada vazia não utilizada (para a qual eu pessoalmente uso Void
). Seu último TIO seria então esse .
448LDδ4Å0
ou alternativamente:
¾4Ž1ÂDиии
-2 bytes graças a @Emigna .
-1 byte graças a @Adnan .
Emite uma lista 3D de 448x448x4 de 0s.
Explicação:
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)
Veja este 05AB1E resposta meu (seção Como comprimir grandes inteiros? ) Para entender por que Ž1Â
é 448
.
[[[0]*4]*488]*488
Com impressão:
print[[[0]*4]*488]*488
Como variável:
x=[[[0]*4]*488]*488
Como uma matriz de RGBA é permitida, foi isso que criei acima, padronizando todos os 0s - significando preto, mas totalmente transparente.
[0]*802816
que isso também deve funcionar.
448ṁ4¬¥þ
Um link niládico que gera uma matriz de 448 por 448 RGBA de pixels pretos transparentes.
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]
Isso é válido?
<svg height=448 width=448
Teste ( background
aplicado com CSS para que você possa "vê-lo")
<svg height=448 width=448
em um arquivo html e abri-lo produz um vazio <body>
. No entanto , com a penalidade de 1 byte, se você escrever <svg height=448 width=448>
, produz um <body>
com uma imagem SVG vazia.
>
significa que isso é, de fato, válido, tanto quanto a marcação.
<!DOCTYPE html>
, <html>
, <head>
, <style>
, <script>
e tudo vai para o <body>
. É necessário um pouco do código adicional para produzir a saída desejada. Você pode ver que o código resultante é analisado como <svg height="448" width="448" < body></svg>
, porque ele grava <svg height=448 width=448 </body>
no iframe. Como tal, ainda acredito que não é válido.
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);}
Isso grava um arquivo o.tga real e legível, sem bibliotecas ou funções internas, usando o formato binário TGA por http://paulbourke.net/dataformats/tga/ , codificando a largura e a altura no cabeçalho do arquivo binário.
-5 bytes abreviam o nome do arquivo, corrigem o tamanho da imagem, somente @ ASCII
a
iria funcionar como nome de arquivo não seria. btw é 448 * 448 não 444 * 444, então isso é inválido
[255,0,0,0,0]
6272 vezes ( [0,0,0,0]
128 vezes, repetidas 6272 vezes). o tipo de imagem então 10
não seria 2
. ainda melhor, mapa de cores para a codificação da duração da execução mais curta ( 0,0,0,0
-> 0
)
_=>(Enumerable.Repeat((0,0,0,0),200704),448,448)
Aparentemente, a saída [1D array of pixels, width, height]
está ok, então isso gera uma tupla de `(IEnumerable de pixels, largura, altura).
_=>Enumerable.Repeat(Enumerable.Repeat((0,0,0,0),448),448)
A matriz original retornando resposta.
Como as regras de E / S da imagem permitem a saída como uma matriz de valores RGB, esse envio gera uma matriz de valores RGBA, representada por tuplas com quatro valores, sendo todos 0.
Infelizmente, o PHP meio que é péssimo nesse aspecto, porque requer muito código. Mas, novamente, onde o PHP não é ruim?
$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
Obviamente, se você quiser apenas criá-lo sem enviá-lo, poderá omitir os comandos header()
e readfile()
. Ainda assim, é idioticamente longo.
'<?php return '.var_export(array_fill(0,952576,0),1).';';
para exportar a matriz de maneira executável. você pode fazer php -f image.php > array.php
e em outro lugar você pode fazer $array = include('array.php');
para ter uma matriz utilizável novamente. Mas eu não sei se é válido, então estou dando a você para adicionar como alternativa. Ou até um <?=json_encode(array_fill(0,952576,0));
.
true
pode ser substituído por 1
, para salvar 3 bytes. Lendo a documentação de imagepng()
, você pode apenas fazer header('Content-type: image/png');imagepng($i);
. Eu acredito que você também pode substituir $b=imagecolorallocatealpha($i,0,0,0,127);imagefill($i,0,0,$b);
por, imagefill($i,0,0,imagecolorallocatealpha($i,0,0,0,127));
mas não me cite sobre isso.
<? imagecolorallocatealpha($i=imagecreate(448,448),0,0,0,127);header('Content-type: image/png');imagepng($i);
produz uma imagem transparente (109 bytes). Envia automaticamente a imagem para o navegador / saída padrão e tudo mais.
Python 3.7 - PIL Importado, 30 bytes
Image.new("LA",[448]*2).show()
Isso requer uma importação, mas tem o benefício de criar e exibir um arquivo de imagem real, em vez de uma matriz vazia abstrata.
Explicação:
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 () abrirá a imagem no seu programa de imagem padrão. No meu caso, isso abre um arquivo de bitmap temporário no Windows Photo Viewer, mas os resultados podem variar. Indiscutivelmente, isso é trapaça, pois a representação de bitmap não contém transparência
Variações ...
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 bytes.
imwrite(nan(448),'.png','tr',1)
Cria uma matriz de NaN
valores 448 x 448 e, em seguida, usa-os imwrite
para salvá-los em um arquivo PNG nomeado '.png'
e define a transparência como 1, tornando-o transparente. O 'Transparency'
nome do parâmetro pode ser abreviado para 'tr'
MATLAB, permitindo a correspondência parcial de string dos nomes dos parâmetros, desde que a versão abreviada seja exclusiva entre os parâmetros disponíveis.
{P5.img⍴∘0,⍨448}
Função que gera um objeto de imagem que pode ser desenhado na tela (sem efeito) ou convertido novamente em valores de pixel.
-2 graças a ngn !
{P5.img⍴∘0,⍨448}
x4Wẋ448Ɗ⁺
Produz uma matriz de 448x448x4
Obrigado a @ JonathanAllan por salvar um byte.
2¡
pode ser⁺
a: make image![448x448 0.0.0.255]
O padrão de opacidade é totalmente opaco (0)
Isto é como usá-lo / um programa completo /:
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
Este método economiza 1 byte em comparação com o "padrão" ♦7*_4º*a*a*
_=>[w=448,w,Array(w*w).fill([0,0,0,0])]
Aparentemente, a saída [height, width, 1d array of RGBA values]
está ok.
-3 bytes graças a @Arnauld
[1D array of pixels, width, height]
DIM A[448,448]SAVE"DAT:I",A
Salva uma matriz bidimensional de 448x448 preenchida com 0s em um arquivo chamado DAT:I
(que é mais curto do que definir uma função que retorna a matriz, de alguma forma)
Os formatos padrão (usados por todas as funções gráficas) para cores no SmileBASIC são ARGB de 32 bits e 5551 RGBA de 16 bits e 0
são transparentes em ambos.
ARGB
formato de 4 bytes (comumente usado em Smilebasic), assim 0x00000000
como Alpha = 0, Vermelho = 0, Verde = 0, Azul = 0. O preto seria 0xFF000000
.
GRP
mas deixarei para lá, já que os dados reais sendo armazenados são os mesmos.
Text"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
Base64Encode Decode
ResizeImage 448
Pega um gif transparente 1x1 codificado como base64 e o redimensiona
♪☺ü@/øP♦£Q)%)£Q◄úæD)%)£Q
Explicação
♪☺ü@ # 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");}
Clicar em "Executar snippet de código" gerará um PNG transparente de 448x448 em um IFRAME. Você pode clicar com o botão direito do mouse em "Salvar imagem como ..." para fazer o download para o seu computador.