Dies ist eine einfache Herausforderung.
Die Aufgabe besteht darin, Code zu schreiben, der ein 448 * 448-Quadrat-Bild mit 100% Transparenz ausgibt. Die Ausgabe sollte den Standardbildregeln entsprechen .
Dies ist eine einfache Herausforderung.
Die Aufgabe besteht darin, Code zu schreiben, der ein 448 * 448-Quadrat-Bild mit 100% Transparenz ausgibt. Die Ausgabe sollte den Standardbildregeln entsprechen .
Antworten:
convert -size 448x448 xc:none a.png
Ist das erlaubt?
\windows\system32
).
convert
Tool ausgeliefert, da der Name nicht mit dem Systemdienstprogramm übereinstimmt. Du rennst magick convert ...
stattdessen.
convert
ist Teil von ImageMagick, daher würde es nicht funktionieren, es als eigene Sprache zu bezeichnen.
ImageMagick Convert
.
Volles Programm. Druckt ein 448 x 448 x 4-Array, das ein 448 x 448 rgba-Bild darstellt.
448 448 4⍴0
⍴
ist r eshape
448 448
?
802832p0
als Antwort haben?
f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());
Gibt ein PNG-Bild zurück, das als Daten codiert ist: URL, die z. B. zum Einstellen als src
von geeignet ist HTMLImageElement
. Bearbeiten: 3 Bytes dank @Shaggy und weitere 2 Bytes dank @Arnauld gespeichert.
document.createElement`canvas`
sollte funktionieren und 2 weitere Bytes sparen.
d=document
an der Spitze und ersetzen document
mit d
? Sollte ~ 5 Zeichen speichern.
document.write
ist nur ein Teil des Stack-Snippets, nicht Teil der Funktion, daher zählt es sowieso nicht.
v->new int[448][448][4]
Gibt ein 3D-Array mit 448 x 448 x 4 0 zurück.
Erläuterung:
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]
Gibt eine 448x448-Matrix von 0s zurück.
In Java können RGBA-Werte durch eine Ganzzahl dargestellt werden . Das Hexadezimal 0x00000000
würde 00
für Rot, Grün, Blau bzw. Alpha stehen. Und 0x00000000
ist gleich der ganzen Zahl 0
.
v->new int[448][448]
? Weil eine Farbe in Java mit einer Ganzzahl (RGBA) dargestellt werden kann.
0-255
ein gültiger RBGA-Wert? Ich weiß, es ist ein gültiger RGB-Wert, aber auch RGBA? Ich verwende fast nie Bilder in Java, daher bin ich mit ihnen nicht allzu vertraut. Ich habe meine 4 inneren Nullen einfach auf andere Antworten gestützt.
0x00000000
, die auf ein int passen. Die ersten 2 Hex-Ziffern sind das Alpha, die nächsten 2 sind das Rot, die nächsten 2 sind das Grün, die letzten 2 sind das Blau. Sie benötigen also nur eine Ganzzahl. Siehe BufferedImage.TYPE_INT_ARGB . Sie haben 4 Werte, zusammengefasst als eine Ganzzahl. Und 0x00000000
ist gleich 0
.
Speichern des Bildes in einer Datei mit einem Pfad von s
101 Bytes
s->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",new java.io.File(s))
Probieren Sie es online aus ... irgendwie
Rückgabe des BufferedImage, 46 Bytes
v->new java.awt.image.BufferedImage(448,448,2)
Speichern des Bildes in der Datei f
, 83 Bytes
f->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",f)
Dumping von PNG an STDOUT, 92 Bytes (nur ASCII!)
v->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",System.out)
Probieren Sie es online aus!
Vielen Dank an Kevin für das Speichern eines Bytes für die zweite und vierte Lösung!
()->
in zwei Ihrer Antworten auf Golf spielen v->
, da es einen leeren unbenutzten Eingang haben darf (für den ich persönlich benutze Void
). Ihr letzter TIO wäre dann dieser .
448LDδ4Å0
oder alternativ:
¾4Ž1ÂDиии
-2 Bytes dank @Emigna .
-1 Byte dank @Adnan .
Gibt eine 448x448x4 3D-Liste von Nullen aus.
Erläuterung:
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)
Sehen Sie diese 05AB1E Antwort von mir (Abschnitt Wie große natürliche Zahlen zu komprimieren? ) Zu verstehen , warum Ž1Â
ist 448
.
[[[0]*4]*488]*488
Mit Druck:
print[[[0]*4]*488]*488
Als Variable:
x=[[[0]*4]*488]*488
Da ein Array von RGBA zulässig ist, habe ich dies oben erstellt und standardmäßig alle Nullen verwendet - das heißt schwarz, aber völlig transparent.
[0]*802816
dass dies auch funktionieren sollte.
448ṁ4¬¥þ
Eine niladische Verbindung, die ein 448 x 448 RGBA-Array transparenter schwarzer Pixel ergibt.
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]
Ist das gültig?
<svg height=448 width=448
Testen Sie es ( background
angewendet mit CSS, damit Sie es "sehen" können)
<svg height=448 width=448
in eine HTML-Datei und das Öffnen eine leere Datei erzeugt <body>
. Bei einer Strafe von 1 Byte wird beim Schreiben <svg height=448 width=448>
jedoch ein <body>
Bild mit einem leeren SVG-Bild erstellt.
>
bedeutet, dass dies tatsächlich gültig ist, was das Markup betrifft.
<!DOCTYPE html>
, <html>
, <head>
, <style>
, <script>
und alles rund um das geht <body>
. Ein Teil des zusätzlichen Codes ist erforderlich, um die gewünschte Ausgabe zu erzeugen. Sie können sehen, dass der resultierende Code als analysiert wird <svg height="448" width="448" < body></svg>
, da er <svg height=448 width=448 </body>
in den Iframe schreibt . Als solches glaube ich immer noch, dass es nicht gültig ist.
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);}
Dadurch wird eine tatsächliche, lesbare o.tga-Datei ohne Bibliotheken oder integrierte Funktionen im TGA-Binärformat gemäß http://paulbourke.net/dataformats/tga/ geschrieben , indem Breite und Höhe fest in den Binärdateikopf codiert werden.
-5 Bytes verkürzen den Dateinamen, korrigieren die Bildgröße, nur bei ASCII
a
würde auch als Dateiname funktionieren, nicht wahr? Übrigens ist es 448 * 448, nicht 444 * 444, also ist dies ungültig
[255,0,0,0,0]
6272-mal sein ( [0,0,0,0]
128-mal, 6272-mal wiederholt). Der Bildtyp wäre dann 10
nicht 2
. Noch besser, Farbkarte für kürzere Lauflängen-Codierung ( 0,0,0,0
-> 0
)
_=>(Enumerable.Repeat((0,0,0,0),200704),448,448)
Anscheinend ist die Ausgabe [1D array of pixels, width, height]
in Ordnung, daher wird ein Tupel von `ausgegeben (IEnumerable von Pixeln, Breite, Höhe).
_=>Enumerable.Repeat(Enumerable.Repeat((0,0,0,0),448),448)
Die ursprüngliche Matrix gibt die Antwort zurück.
Da die Bild-E / A-Regeln die Ausgabe als Matrix von RGB-Werten ermöglichen, gibt diese Übermittlung eine Matrix von RGBA-Werten aus, die durch Tupel mit vier Werten dargestellt werden, die alle 0 sind.
Leider saugt PHP diesen Aspekt irgendwie an, weil es eine ganze Menge Code erfordert. Aber wo saugt PHP nicht?
$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
Wenn Sie es nur erstellen möchten, ohne es auszugeben, können Sie natürlich die Befehle header()
und weglassen readfile()
. Trotzdem ist es idiotisch lang.
'<?php return '.var_export(array_fill(0,952576,0),1).';';
das Array auf ausführbare Weise exportieren. Sie können tun php -f image.php > array.php
, und woanders können Sie tun $array = include('array.php');
, um wieder ein verwendbares Array zu haben. Aber ich weiß nicht, ob es gültig ist, also gebe ich es Ihnen, um es als Alternative hinzuzufügen. Oder sogar ein <?=json_encode(array_fill(0,952576,0));
.
true
Kann übrigens durch ersetzt werden 1
, um 3 Bytes zu sparen. Lesen Sie die Dokumentation von imagepng()
, können Sie einfach tun header('Content-type: image/png');imagepng($i);
. Ich glaube , Sie können auch ersetzen $b=imagecolorallocatealpha($i,0,0,0,127);imagefill($i,0,0,$b);
mit imagefill($i,0,0,imagecolorallocatealpha($i,0,0,0,127));
aber Lassen Sie mich nicht an , dass zitieren.
<? imagecolorallocatealpha($i=imagecreate(448,448),0,0,0,127);header('Content-type: image/png');imagepng($i);
ein transparentes Bild (109 Bytes) erzeugt. Sendet das Bild automatisch an den Browser / die Standardausgabe und alles.
Python 3.7 - PIL importiert, 30 Bytes
Image.new("LA",[448]*2).show()
Dies erfordert einen Import, hat jedoch den Vorteil, dass eine tatsächliche Bilddatei anstelle eines abstrakten leeren Arrays erstellt und angezeigt wird.
Erläuterung:
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 () öffnet das Bild in Ihrem Standardbildprogramm. In meinem Fall wird dadurch eine temporäre Bitmap-Datei in Windows Photo Viewer geöffnet, die Ergebnisse können jedoch variieren. Dies ist wohl ein Betrug, da die Bitmap-Darstellung keine Transparenz enthält
Variationen ...
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)
Erstellt eine 448 x 448-Wertematrix NaN
und imwrite
speichert sie anschließend in einer PNG-Datei mit dem Namen '.png'
und setzt die Transparenz auf 1, wodurch sie transparent wird. Der 'Transparency'
Parametername kann abgekürzt werden, 'tr'
da MATLAB eine teilweise Zeichenfolgenübereinstimmung von Parameternamen ermöglicht, solange die verkürzte Version unter den verfügbaren Parametern eindeutig ist.
{P5.img⍴∘0,⍨448}
Funktion, die ein Bildobjekt ausgibt, das auf den Bildschirm gezeichnet werden kann (ohne Effekt) oder wieder in Pixelwerte konvertiert werden kann.
-2 danke an ngn !
{P5.img⍴∘0,⍨448}
x4Wẋ448Ɗ⁺
Gibt ein 448x448x4-Array aus
Vielen Dank an @JonathanAllan für das Speichern eines Bytes.
2¡
kann sein⁺
a: make image![448x448 0.0.0.255]
Die Deckkraft ist standardmäßig vollständig undurchsichtig (0).
So verwenden Sie es / ein vollständiges Programm /:
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
Diese Methode spart 1 Byte gegenüber dem "Standard" ♦7*_4º*a*a*
_=>[w=448,w,Array(w*w).fill([0,0,0,0])]
Anscheinend ist die Ausgabe [height, width, 1d array of RGBA values]
in Ordnung.
-3 Bytes dank @Arnauld
[1D array of pixels, width, height]
DIM A[448,448]SAVE"DAT:I",A
Speichert ein zweidimensionales 448x448-Array, das mit Nullen gefüllt ist, in einer Datei mit dem Namen DAT:I
(was kürzer ist als das Definieren einer Funktion, die das Array irgendwie zurückgibt).
Die Standardformate (von allen Grafikfunktionen verwendet) für Farben in SmileBASIC sind 32-Bit-ARGB und 16-Bit-5551-RGBA und 0
sind in beiden transparent.
ARGB
Format (üblicherweise in Smilebasic verwendet), also 0x00000000
Alpha = 0, Rot = 0, Grün = 0, Blau = 0. Schwarz wäre 0xFF000000
.
GRP
Fall ist, aber ich werde es loslassen, da die tatsächlich gespeicherten Daten dieselben sind.
Text"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
Base64Encode Decode
ResizeImage 448
Nimmt ein 1x1 transparentes GIF, das als base64 codiert ist, und ändert die Größe
♪☺ü@/øP♦£Q)%)£Q◄úæD)%)£Q
Erläuterung
♪☺ü@ # 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");}
Wenn Sie auf "Code-Snippet ausführen" klicken, wird ein transparentes PNG 448 x 448 in einem IFRAME generiert. Sie können dann mit der rechten Maustaste auf "Bild speichern unter ..." klicken, um es auf Ihren Computer herunterzuladen.