Questa è una sfida semplice.
Il compito è quello di scrivere codice che generi un'immagine quadrata 448 * 448 con trasparenza al 100%. L'output dovrebbe seguire le regole standard dell'immagine .
Questa è una sfida semplice.
Il compito è quello di scrivere codice che generi un'immagine quadrata 448 * 448 con trasparenza al 100%. L'output dovrebbe seguire le regole standard dell'immagine .
Risposte:
convert -size 448x448 xc:none a.png
È permesso?
\windows\system32
).
convert
strumento, poiché il nome si scontra con l'utilità di sistema. Corri magick convert ...
invece.
convert
fa parte di ImageMagick, quindi chiamarlo nella sua lingua non funzionerebbe.
ImageMagick Convert
. Potrebbe valere la pena di aprire una meta a riguardo
Programma completo. Stampa una matrice 448 per 448 per 4 che rappresenta un'immagine rgba 448 per 448.
448 448 4⍴0
⍴
è r eshape
448 448
?
802832p0
come risposta?
f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());
Restituisce un'immagine PNG codificata come un dato: URL adatto ad es. Per l'impostazione come src
di HTMLImageElement
. Modifica: 3 byte salvati grazie a @Shaggy e altri 2 byte grazie a @Arnauld.
document.createElement`canvas`
dovrebbe funzionare, risparmiando altri 2 byte.
d=document
in alto e sostituirlo document
con d
? Dovrebbe salvare ~ 5 caratteri.
document.write
solo parte dello snippet dello stack, non fa parte della funzione, quindi non conta comunque.
v->new int[448][448][4]
Restituisce un array 3D di 448x448x4 0s.
Spiegazione:
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]
Restituisce una matrice 448x448 di 0 secondi.
In Java, i valori RGBA possono essere rappresentati da un numero intero . L'esadecimale 0x00000000
rappresenterebbe rispettivamente 00
per rosso, verde, blu e alfa. Ed 0x00000000
è uguale al numero intero 0
.
v->new int[448][448]
? Perché un colore può essere rappresentato con un numero intero (RGBA) in Java.
0-255
un valore RBGA valido? So che è un valore RGB valido, ma anche RGBA? Non uso quasi mai le immagini in Java, quindi non le conosco molto bene. Ho semplicemente basato i miei 4 0 interni su altre risposte.
0x00000000
che si adattano a un int. Le prime 2 cifre esadecimali sono l'Alfa, le successive 2 sono il rosso, le successive 2 sono il verde, le ultime 2 sono il blu, quindi è necessario solo un numero intero. Vedi BufferedImage.TYPE_INT_ARGB . Hai 4 valori, riassunti in un intero. Ed 0x00000000
è uguale a 0
.
Salvataggio dell'immagine in un file con percorso s
, 101 byte
s->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",new java.io.File(s))
Provalo online ... in qualche modo
Restituzione dell'immagine bufferizzata, 46 byte
v->new java.awt.image.BufferedImage(448,448,2)
Salvataggio dell'immagine nel file f
, 83 byte
f->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",f)
Dumping PNG su STDOUT, 92 byte (grazie solo ASCII!)
v->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",System.out)
Provalo online!
Grazie a Kevin per aver salvato un byte per la seconda e la quarta soluzione!
()->
a golf in due delle tue risposte v->
, dato che è permesso avere un input vuoto inutilizzato (per il quale io uso personalmente Void
). Il tuo ultimo TIO sarebbe quindi questo invece .
448LDδ4Å0
o in alternativa:
¾4Ž1ÂDиии
-2 byte grazie a @Emigna .
-1 byte grazie a @Adnan .
Emette un elenco 3D di 448x448x4 di 0 secondi.
Spiegazione:
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)
Vedere questo 05AB1E risposta di mine (sezione Come comprimere grandi numeri interi? ) Per capire il motivo per cui Ž1Â
è 448
.
[[[0]*4]*488]*488
Con stampa:
print[[[0]*4]*488]*488
Come variabile:
x=[[[0]*4]*488]*488
Poiché è consentito un array di RGBA, questo è ciò che ho creato sopra, in modo predefinito su tutti gli 0 - che significa nero, ma totalmente trasparente.
[0]*802816
che dovrebbe funzionare anche.
448ṁ4¬¥þ
Un collegamento niladico che produce un array RGBA 448 per 448 di pixel neri trasparenti.
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]
È valido?
<svg height=448 width=448
Provalo ( background
applicato con CSS in modo da poterlo "vedere")
<svg height=448 width=448
in un file html e aprirlo produce un vuoto <body>
. Tuttavia , con la penalità di 1 byte, se si scrive <svg height=448 width=448>
, produce un'immagine <body>
con un'immagine SVG vuota.
>
significa che ciò è, in effetti, valido, per quanto riguarda il markup.
<!DOCTYPE html>
, <html>
, <head>
, <style>
, <script>
e tutto ciò che va al <body>
. Parte del codice aggiuntivo è necessario per produrre l'output desiderato. Puoi vedere che il codice risultante viene analizzato come <svg height="448" width="448" < body></svg>
, perché scrive <svg height=448 width=448 </body>
nell'iframe. Come tale, credo ancora che non sia valido.
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);}
Questo scrive un file o.tga reale e leggibile, senza librerie o funzioni incorporate, utilizzando il formato binario TGA per http://paulbourke.net/dataformats/tga/ , codificando a fondo la larghezza e l'altezza nell'intestazione del file binario.
-5 byte abbreviano il nome file, correggono le dimensioni img, solo @ ASCII
a
come nome del file non dovrebbe. tra esso è 448 * 448 non 444 * 444 quindi questo non è valido
[255,0,0,0,0]
6272 volte ( [0,0,0,0]
128 volte, ripetuto 6272 volte) tipo di immagine sarebbe quindi. 10
non 2
ancora meglio, mappa colori di lunghezza minore corsa codifica (. 0,0,0,0
-> 0
)
_=>(Enumerable.Repeat((0,0,0,0),200704),448,448)
Apparentemente l'output [1D array of pixels, width, height]
è ok, quindi questo genera una tupla di `(IEnumerable di pixel, larghezza, altezza).
_=>Enumerable.Repeat(Enumerable.Repeat((0,0,0,0),448),448)
La matrice originale restituisce la risposta.
Poiché le regole I / O dell'immagine consentono l'output come una matrice di valori RGB, questa presentazione genera una matrice di valori RGBA, rappresentati da tuple con quattro valori, essendo tutti 0.
Purtroppo, PHP fa schifo in questo aspetto perché richiede molto codice. Ma poi di nuovo, dove PHP non fa schifo.
$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
Ovviamente, se vuoi solo crearlo senza emetterlo, puoi omettere i comandi header()
e readfile()
. Tuttavia, è idioticamente lungo.
'<?php return '.var_export(array_fill(0,952576,0),1).';';
per esportare l'array in modo eseguibile. puoi fare php -f image.php > array.php
e da qualche altra parte puoi fare $array = include('array.php');
di nuovo un array utilizzabile. Ma non so se sia valido, quindi, te lo sto dando da aggiungere come alternativa. O anche a <?=json_encode(array_fill(0,952576,0));
.
true
può essere sostituito con 1
, per salvare 3 byte. Leggendo la documentazione di imagepng()
, puoi semplicemente farlo header('Content-type: image/png');imagepng($i);
. Credo che puoi anche sostituire $b=imagecolorallocatealpha($i,0,0,0,127);imagefill($i,0,0,$b);
con, imagefill($i,0,0,imagecolorallocatealpha($i,0,0,0,127));
ma non citarmi su questo.
<? imagecolorallocatealpha($i=imagecreate(448,448),0,0,0,127);header('Content-type: image/png');imagepng($i);
produce un'immagine trasparente (109 byte). Invia automaticamente l'immagine al browser / output standard e tutto il resto.
Python 3.7 - PIL importato, 30 byte
Image.new("LA",[448]*2).show()
Ciò richiede un'importazione ma ha il vantaggio di creare e visualizzare un file di immagine reale anziché un array vuoto astratto.
Spiegazione:
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 () aprirà l'immagine nel tuo programma immagine predefinito. Nel mio caso questo apre un file bitmap temporaneo nel Visualizzatore foto di Windows ma i risultati possono variare. Probabilmente questo è barare poiché la rappresentazione bitmap non contiene trasparenza
Variazioni ...
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 byte.
imwrite(nan(448),'.png','tr',1)
Crea una matrice di NaN
valori 448 x 448 , quindi li utilizza imwrite
per salvarli in un file PNG denominato '.png'
e imposta la trasparenza su 1, rendendola trasparente. Il 'Transparency'
nome del parametro può essere abbreviato 'tr'
poiché MATLAB consente la corrispondenza parziale delle stringhe dei nomi dei parametri purché la versione abbreviata sia univoca tra i parametri disponibili.
x4Wẋ448Ɗ⁺
Emette un array 448x448x4
Grazie a @JonathanAllan per aver salvato un byte.
2¡
può essere⁺
a: make image![448x448 0.0.0.255]
L'impostazione predefinita è Opacità completamente opaca (0)
Ecco come usarlo / un programma 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
Questo metodo consente di risparmiare 1 byte rispetto allo "standard" ♦7*_4º*a*a*
_=>[w=448,w,Array(w*w).fill([0,0,0,0])]
Apparentemente l'output [height, width, 1d array of RGBA values]
è ok.
-3 byte grazie a @Arnauld
[1D array of pixels, width, height]
DIM A[448,448]SAVE"DAT:I",A
Salva un array 448x448 bidimensionale riempito con 0s in un file denominato DAT:I
(che è più breve della definizione di una funzione che restituisce l'array, in qualche modo)
I formati standard (utilizzati da tutte le funzioni grafiche) per i colori in SmileBASIC sono ARGB a 32 bit e RGBA a 55 bit 5551 ed 0
è trasparente in entrambi.
ARGB
formato a 4 byte (comunemente usati in Smilebasic), quindi 0x00000000
Alpha = 0, Red = 0, Green = 0, Blue = 0. Il nero sarebbe 0xFF000000
.
GRP
ma lo lascerò andare poiché i dati effettivi archiviati sono gli stessi.
Text"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
Base64Encode Decode
ResizeImage 448
Collegamento iCloud di collegamento
Prende un gif trasparente 1x1 codificato come base64 e lo ridimensiona
♪☺ü@/øP♦£Q)%)£Q◄úæD)%)£Q
Spiegazione
♪☺ü@ # 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");}
Facendo clic su "Esegui snippet di codice" si genererà un PNG trasparente 448x448 in un IFRAME. È quindi possibile fare clic con il pulsante destro del mouse su "Salva immagine come ..." per scaricarlo sul computer.