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).
convertferramenta, porque o nome entra em conflito com o utilitário do sistema. Você corre magick convert ... em seu lugar.
convertfaz 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?
802832p0como 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 srcde 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=documentno topo e substituir documentpor 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 0x00000000representaria 00para 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-255um 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.
0x00000000que 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]*802816que 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 ( backgroundaplicado com CSS para que você possa "vê-lo")
<svg height=448 width=448em 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
airia 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 10nã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.phpe 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));.
truepode 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 NaNvalores 448 x 448 e, em seguida, usa-os imwritepara 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 0são transparentes em ambos.
ARGBformato de 4 bytes (comumente usado em Smilebasic), assim 0x00000000como Alpha = 0, Vermelho = 0, Verde = 0, Azul = 0. O preto seria 0xFF000000.
GRPmas 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.