Este es un desafío simple.
La tarea es escribir código que genere una imagen cuadrada de 448 * 448 con 100% de transparencia. El resultado debe seguir las reglas de imagen estándar .
Este es un desafío simple.
La tarea es escribir código que genere una imagen cuadrada de 448 * 448 con 100% de transparencia. El resultado debe seguir las reglas de imagen estándar .
Respuestas:
convert -size 448x448 xc:none a.png
¿Esto está permitido?
\windows\system32
).
convert
herramienta, porque el nombre choca con la utilidad del sistema. Corres en su magick convert ...
lugar.
convert
es parte de ImageMagick, por lo que llamarlo en su propio idioma no funcionaría.
ImageMagick Convert
. Sin embargo
Programa completo Imprime una matriz de 448 por 448 por 4 que representa una imagen rgba de 448 por 448.
448 448 4⍴0
⍴
es r eshape
448 448
.
802832p0
como respuesta?
f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());
Devuelve una imagen PNG codificada como datos: URL adecuada, p. Ej., Para establecerla como src
una HTMLImageElement
. Editar: Guardado 3 bytes gracias a @Shaggy y otros 2 bytes gracias a @Arnauld.
document.createElement`canvas`
debería funcionar, ahorrando 2 bytes más.
d=document
en la parte superior y reemplazarlo document
con d
? Debería guardar ~ 5 caracteres.
document.write
es solo parte del fragmento de pila, no parte de la función, por lo que no cuenta de todos modos.
v->new int[448][448][4]
Devuelve una matriz 3D de 448x448x4 0s.
Explicación:
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]
Devuelve una matriz de 448x448 de 0s.
En Java, los valores RGBA pueden representarse mediante un número entero . El hexadecimal 0x00000000
representaría 00
para rojo, verde, azul y alfa respectivamente. Y 0x00000000
es igual al entero 0
.
v->new int[448][448]
? Porque un color se puede representar con un número entero (RGBA) en Java.
0-255
un valor RBGA válido? Sé que es un valor RGB válido, pero también RGBA. Casi nunca uso imágenes en Java, así que no estoy muy familiarizado con ellas. Simplemente basé mis 4 ceros internos en otras respuestas.
0x00000000
que caben en un int. Los primeros 2 dígitos hexadecimales son el Alfa, los siguientes 2 son el rojo, los siguientes 2 son el verde, los 2 últimos son el azul, por lo que solo necesita un número entero. Ver BufferedImage.TYPE_INT_ARGB . Tienes 4 valores, resumidos como un entero. Y 0x00000000
es igual a 0
.
Guardar la imagen en un archivo con ruta s
, 101 bytes
s->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",new java.io.File(s))
Pruébelo en línea ... de alguna manera
Devolviendo la imagen almacenada, 46 bytes
v->new java.awt.image.BufferedImage(448,448,2)
Guardar la imagen en el archivo f
, 83 bytes
f->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",f)
Volcado de PNG a STDOUT, 92 bytes (¡gracias solo ASCII!)
v->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",System.out)
Pruébalo en línea!
¡Gracias a Kevin por guardar un byte para la segunda y cuarta solución!
()->
en dos de sus respuestas v->
, ya que se le permite tener una entrada vacía no utilizada (para lo que yo personalmente uso Void
). Su último TIO sería este en su lugar .
448LDδ4Å0
o alternativamente:
¾4Ž1ÂDиии
-2 bytes gracias a @Emigna .
-1 byte gracias a @Adnan .
Emite una lista 3D de 0s de 448x448x4.
Explicación:
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)
Ver este 05AB1E respuesta mío (sección Cómo comprimir grandes números enteros? ) Para entender por qué Ž1Â
es 448
.
[[[0]*4]*488]*488
Con impresión:
print[[[0]*4]*488]*488
Como variable:
x=[[[0]*4]*488]*488
Como se permite un conjunto de RGBA, eso es lo que he creado anteriormente, por defecto a todos los 0, es decir, negro, pero totalmente transparente.
[0]*802816
que también debería funcionar.
448ṁ4¬¥þ
Un enlace niládico que produce una matriz RGBA de 448 por 448 de píxeles negros 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]
¿Es esto válido?
<svg height=448 width=448
Pruébelo ( background
aplicado con CSS para que pueda "verlo")
<svg height=448 width=448
en un archivo html y abrirlo produce un vacío <body>
. Sin embargo , con la penalidad de 1 byte, si escribe <svg height=448 width=448>
, produce un <body>
con una imagen SVG vacía.
>
significa que esto es, de hecho, válido, en lo que respecta al marcado.
<!DOCTYPE html>
, <html>
, <head>
, <style>
, <script>
y todo va al <body>
. Se requiere parte del código adicional para producir la salida deseada. Puede ver que el código resultante se analiza como <svg height="448" width="448" < body></svg>
, porque escribe <svg height=448 width=448 </body>
en el iframe. Como tal, todavía creo que no es 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);}
Esto escribe un archivo o.tga real y legible, sin bibliotecas ni funciones integradas, utilizando el formato binario TGA según http://paulbourke.net/dataformats/tga/ , codificando el ancho y la altura en el encabezado del archivo binario.
-5 bytes acortar el nombre del archivo, corregir el tamaño de la imagen, @ solo ASCII
a
funcionaría como nombre de archivo no lo haría. por cierto es 448 * 448 no 444 * 444, por lo que esto no es válido
[255,0,0,0,0]
6272 veces ( [0,0,0,0]
128 veces, repetidas 6272 veces). El tipo de imagen 10
no sería, 2
incluso mejor, mapa de colores para una codificación de longitud de ejecución más corta ( 0,0,0,0
-> 0
)
_=>(Enumerable.Repeat((0,0,0,0),200704),448,448)
Aparentemente, la salida [1D array of pixels, width, height]
está bien, por lo que genera una tupla de `(IEnumerable de píxeles, ancho, alto).
_=>Enumerable.Repeat(Enumerable.Repeat((0,0,0,0),448),448)
La matriz original que devuelve la respuesta.
Dado que las reglas IO de la imagen permiten la salida como una matriz de valores RGB, este envío genera una matriz de valores RGBA, representada por tuplas con cuatro valores, siendo todos 0.
Lamentablemente, PHP apesta en ese aspecto porque requiere una gran cantidad de código. Pero, de nuevo, donde PHP no apesta.
$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');
Sin golf:
$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, si solo desea crearlo sin generarlo, puede omitir los comandos header()
y readfile()
. Aún así, es idiotamente largo.
'<?php return '.var_export(array_fill(0,952576,0),1).';';
para exportar la matriz de forma ejecutable. puede hacer php -f image.php > array.php
, y en otro lugar puede hacer $array = include('array.php');
para tener una matriz utilizable nuevamente. Pero no sé si es válido, así que te lo doy para que lo agregues como alternativa. O incluso a <?=json_encode(array_fill(0,952576,0));
.
true
se puede reemplazar con 1
, para guardar 3 bytes. Leyendo la documentación de imagepng()
, puedes hacerlo header('Content-type: image/png');imagepng($i);
. Creo que también se puede sustituir $b=imagecolorallocatealpha($i,0,0,0,127);imagefill($i,0,0,$b);
con imagefill($i,0,0,imagecolorallocatealpha($i,0,0,0,127));
menos yo DonT citar al respecto.
<? imagecolorallocatealpha($i=imagecreate(448,448),0,0,0,127);header('Content-type: image/png');imagepng($i);
produce una imagen transparente (109 bytes). Envía automáticamente la imagen al navegador / salida estándar y todo.
Python 3.7 - PIL importado, 30 bytes
Image.new("LA",[448]*2).show()
Esto requiere una importación, pero tiene la ventaja de crear y mostrar un archivo de imagen real en lugar de una matriz vacía abstracta.
Explicación:
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á la imagen en su programa de imagen predeterminado. En mi caso, esto abre un archivo de mapa de bits temporal en Windows Photo Viewer, pero los resultados pueden variar. Podría decirse que esto es trampa ya que la representación de mapa de bits no contiene transparencia
Variaciones ...
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)
Crea una matriz de NaN
valores de 448 x 448 , y luego los usa imwrite
para guardarlos en un archivo PNG llamado '.png'
y establece la transparencia en 1, haciéndolo transparente. El 'Transparency'
nombre del parámetro puede abreviarse 'tr'
ya que MATLAB permite la coincidencia parcial de cadenas de nombres de parámetros siempre que la versión abreviada sea única entre los parámetros disponibles.
{P5.img⍴∘0,⍨448}
Función que genera un objeto de imagen que se puede dibujar en la pantalla (sin efecto) o volver a convertirlo en valores de píxeles.
-2 gracias a ngn !
{P5.img⍴∘0,⍨448}
x4Wẋ448Ɗ⁺
Emite una matriz 448x448x4
Gracias a @JonathanAllan por guardar un byte.
2¡
puede ser⁺
a: make image![448x448 0.0.0.255]
La opacidad por defecto es completamente opaca (0)
Así es como se usa / un 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 ahorra 1 byte en comparación con el "estándar" ♦7*_4º*a*a*
_=>[w=448,w,Array(w*w).fill([0,0,0,0])]
Aparentemente, la salida [height, width, 1d array of RGBA values]
está bien.
-3 bytes gracias a @Arnauld
[1D array of pixels, width, height]
DIM A[448,448]SAVE"DAT:I",A
Guarda una matriz bidimensional 448x448 llena de ceros en un archivo llamado DAT:I
(que es más corto que definir una función que devuelve la matriz, de alguna manera)
Los formatos estándar (utilizados por todas las funciones gráficas) para los colores en SmileBASIC son ARGB de 32 bits y RGBA 5551 de 16 bits, y 0
son transparentes en ambos.
ARGB
formato de 4 bytes (comúnmente utilizado en Smilebasic), por lo que 0x00000000
es Alfa = 0, Rojo = 0, Verde = 0, Azul = 0. Negro sería 0xFF000000
.
GRP
pero lo dejaré ir ya que los datos reales que se almacenan son los mismos.
Text"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
Base64Encode Decode
ResizeImage 448
Toma un gif transparente 1x1 codificado como base64 y lo redimensiona
♪☺ü@/øP♦£Q)%)£Q◄úæD)%)£Q
Explicación
♪☺ü@ # 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");}
Al hacer clic en "Ejecutar fragmento de código", se generará un PNG transparente de 448x448 en un IFRAME. Luego puede hacer clic con el botón derecho en "Guardar imagen como ..." para descargarlo en su computadora.