Ceci est un défi simple.
La tâche consiste à écrire du code qui génère une image carrée de 448 * 448 avec une transparence à 100%. La sortie doit suivre les règles d'image standard .
Ceci est un défi simple.
La tâche consiste à écrire du code qui génère une image carrée de 448 * 448 avec une transparence à 100%. La sortie doit suivre les règles d'image standard .
Réponses:
convert -size 448x448 xc:none a.png
Est-ce permis?
\windows\system32
).
convert
outil, car le nom se heurte à l'utilitaire système. Vous courez à la magick convert ...
place.
convert
fait partie d'ImageMagick, donc l'appeler son propre langage ne fonctionnerait pas.
ImageMagick Convert
. Cela vaut peut-être la peine d'ouvrir une méta à ce sujet
Programme complet. Imprime un tableau de 448 x 448 x 4 représentant une image rgba de 448 x 448.
448 448 4⍴0
⍴
est r eshape
448 448
?
802832p0
comme réponse?
f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());
Renvoie une image PNG encodée sous forme de données: URL appropriée, par exemple pour la définition en tant src
que HTMLImageElement
. Edit: 3 octets enregistrés grâce à @Shaggy et 2 octets supplémentaires grâce à @Arnauld.
document.createElement`canvas`
devrait fonctionner, économisant 2 octets supplémentaires.
d=document
en haut et remplacer document
par d
? Devrait enregistrer ~ 5 caractères.
document.write
n'est qu'une partie de l'extrait de pile, pas une partie de la fonction, donc cela ne compte pas de toute façon.
v->new int[448][448][4]
Renvoie un tableau 3D de 448x448x4 0s.
Explication:
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]
Renvoie une matrice 448x448 de 0.
En Java, les valeurs RGBA peuvent être représentées par un entier . L'hexadécimal 0x00000000
représenterait respectivement le 00
rouge, le vert, le bleu et l'alpha. Et 0x00000000
est égal à l'entier 0
.
v->new int[448][448]
? Parce qu'une couleur peut être représentée avec un entier (RGBA) en Java.
0-255
une valeur RBGA valide? Je sais que c'est une valeur RGB valide, mais aussi RGBA? Je n'utilise presque jamais d'images en Java, donc je ne les connais pas trop. J'ai simplement basé mes 4 0 intérieurs sur d'autres réponses.
0x00000000
qui tiennent sur un int. Les 2 premiers chiffres hexadécimaux sont l'alpha, les 2 suivants sont le rouge, les 2 suivants sont le vert, les 2 derniers sont le bleu, vous n'avez donc besoin que d'un entier. Voir BufferedImage.TYPE_INT_ARGB . Vous avez 4 valeurs, résumées en un seul entier. Et 0x00000000
est égal à 0
.
Enregistrement de l'image dans un fichier avec chemin s
, 101 octets
s->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",new java.io.File(s))
Essayez-le en ligne ... en quelque sorte en
retournant l'image tamponnée, 46 octets
v->new java.awt.image.BufferedImage(448,448,2)
Enregistrement de l'image dans le fichier f
, 83 octets
f->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",f)
Dumping PNG vers STDOUT, 92 octets (merci ASCII uniquement!)
v->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",System.out)
Essayez-le en ligne!
Merci à Kevin d'avoir économisé un octet pour les deuxième et quatrième solutions!
()->
dans deux de vos réponses v->
, car il est autorisé d'avoir une entrée vide inutilisée (pour laquelle j'utilise personnellement Void
). Votre dernier TIO serait alors celui-ci .
448LDδ4Å0
Ou bien:
¾4Ž1ÂDиии
-2 octets grâce à @Emigna .
-1 octet grâce à @Adnan .
Génère une liste 3D de 448x448x4 de 0.
Explication:
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)
Voir cette réponse 05AB1E de mes (section Comment compresser les grands entiers? ) Pour comprendre pourquoi Ž1Â
est 448
.
[[[0]*4]*488]*488
Avec impression:
print[[[0]*4]*488]*488
Comme variable:
x=[[[0]*4]*488]*488
Comme un tableau de RGBA est autorisé, c'est ce que j'ai créé ci-dessus, par défaut à tous les 0 - ce qui signifie noir, mais totalement transparent.
[0]*802816
cela devrait également fonctionner.
448ṁ4¬¥þ
Un lien niladique qui produit une matrice RGBA de 448 x 448 pixels noirs transparents.
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]
Est-ce valable?
<svg height=448 width=448
Testez-le ( background
appliqué avec CSS pour pouvoir le "voir")
<svg height=448 width=448
dans un fichier html et l'ouvrir produit un vide <body>
. Cependant , avec la pénalité de 1 octet, si vous écrivez <svg height=448 width=448>
, cela produit un <body>
avec une image SVG vide.
>
signifie que cela est, en effet, valide, en ce qui concerne le balisage.
<!DOCTYPE html>
, <html>
, <head>
, <style>
, <script>
et tout va à la <body>
. Une partie du code supplémentaire est nécessaire pour produire la sortie souhaitée. Vous pouvez voir que le code résultant est analysé comme <svg height="448" width="448" < body></svg>
, car il écrit <svg height=448 width=448 </body>
dans l'iframe. En tant que tel, je pense toujours que ce n'est pas valable.
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);}
Cela écrit un fichier o.tga réel et lisible, sans bibliothèque ni fonction intégrée, en utilisant le format binaire TGA selon http://paulbourke.net/dataformats/tga/ , en codant en dur la largeur et la hauteur dans l'en-tête du fichier binaire.
-5 octets raccourcir le nom de fichier, fixer la taille img, @ ASCII uniquement
a
comme nom de fichier non. btw c'est 448 * 448 pas 444 * 444 donc c'est invalide
[255,0,0,0,0]
6272 fois ( [0,0,0,0]
128 fois, répété 6272 fois) type d'image serait alors. 10
pas 2
encore mieux, colormap pour le codage de longueur d'exécution plus court (. 0,0,0,0
-> 0
)
_=>(Enumerable.Repeat((0,0,0,0),200704),448,448)
Apparemment, la sortie [1D array of pixels, width, height]
est correcte, donc cela génère un tuple de `(IEnumerable de pixels, largeur, hauteur).
_=>Enumerable.Repeat(Enumerable.Repeat((0,0,0,0),448),448)
La matrice d'origine renvoyant la réponse.
Étant donné que les règles d'E / S d'image permettent la sortie sous forme de matrice de valeurs RVB, cette soumission génère une matrice de valeurs RVBA, représentée par des tuples à quatre valeurs, toutes étant égales à 0.
Malheureusement, PHP aspire un peu dans cet aspect car il nécessite beaucoup de code. Mais là encore, où PHP n'est pas nul.
$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');
Non 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
Évidemment, si vous voulez simplement le créer sans le sortir, vous pouvez omettre les commandes header()
et readfile()
. Pourtant, c'est idiotement long.
'<?php return '.var_export(array_fill(0,952576,0),1).';';
pour exporter le tableau de manière exécutable. vous pouvez faire php -f image.php > array.php
, et ailleurs, vous pouvez faire $array = include('array.php');
pour avoir à nouveau un tableau utilisable. Mais je ne sais pas si elle est valide, alors je vous la donne à ajouter comme alternative. Ou même un <?=json_encode(array_fill(0,952576,0));
.
true
peut être remplacé par 1
, pour économiser 3 octets. En lisant la documentation de imagepng()
, vous pouvez simplement le faire header('Content-type: image/png');imagepng($i);
. Je crois que vous pouvez également remplacer $b=imagecolorallocatealpha($i,0,0,0,127);imagefill($i,0,0,$b);
par, imagefill($i,0,0,imagecolorallocatealpha($i,0,0,0,127));
mais ne me citez pas à ce sujet.
<? imagecolorallocatealpha($i=imagecreate(448,448),0,0,0,127);header('Content-type: image/png');imagepng($i);
produire une image transparente (109 octets). Envoie automatiquement l'image au navigateur / sortie standard et tout.
Python 3.7 - Importé PIL, 30 octets
Image.new("LA",[448]*2).show()
Cela nécessite une importation mais a l'avantage de créer et d'afficher un fichier image réel plutôt qu'un tableau vide abstrait.
Explication:
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 () ouvrira l'image dans votre programme d'image par défaut. Dans mon cas, cela ouvre un fichier bitmap temporaire dans la visionneuse de photos Windows, mais les résultats peuvent varier. On peut dire que c'est de la triche puisque la représentation bitmap ne contient aucune transparence
Variations ...
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 octets.
imwrite(nan(448),'.png','tr',1)
Crée une matrice de NaN
valeurs 448 x 448 , puis les utilise imwrite
pour les enregistrer dans un fichier PNG nommé '.png'
et définit la transparence sur 1, la rendant transparente. Le 'Transparency'
nom du paramètre peut être abrégé 'tr'
car MATLAB permet une correspondance de chaîne partielle des noms de paramètres tant que la version raccourcie est unique parmi les paramètres disponibles.
x4Wẋ448Ɗ⁺
Génère une matrice 448x448x4
Merci à @JonathanAllan d'avoir enregistré un octet.
2¡
peut être⁺
a: make image![448x448 0.0.0.255]
Par défaut, l'opacité est entièrement opaque (0)
Voici comment l'utiliser / un programme complet /:
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
Cette méthode permet d'économiser 1 octet par rapport au "standard" ♦7*_4º*a*a*
_=>[w=448,w,Array(w*w).fill([0,0,0,0])]
Apparemment, la sortie [height, width, 1d array of RGBA values]
est correcte.
-3 octets grâce à @Arnauld
[1D array of pixels, width, height]
DIM A[448,448]SAVE"DAT:I",A
Enregistre un tableau bidimensionnel 448x448 rempli de 0 dans un fichier nommé DAT:I
(ce qui est plus court que la définition d'une fonction qui renvoie le tableau, en quelque sorte)
Les formats standard (utilisés par toutes les fonctions graphiques) pour les couleurs dans SmileBASIC sont 32 bits ARGB et 16 bits 5551 RGBA, et 0
sont transparents dans les deux.
ARGB
format 4 octets (couramment utilisées dans Smilebasic), 0x00000000
Alpha = 0, Rouge = 0, Vert = 0, Bleu = 0. Le noir le serait 0xFF000000
.
GRP
mais je vais le laisser partir car les données réelles stockées sont les mêmes.
Text"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
Base64Encode Decode
ResizeImage 448
Prend un gif transparent 1x1 encodé en base64 et le redimensionne
♪☺ü@/øP♦£Q)%)£Q◄úæD)%)£Q
Explication
♪☺ü@ # 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");}
Un clic sur "Exécuter l'extrait de code" générera un PNG transparent de 448 x 448 dans un IFRAME. Vous pouvez ensuite cliquer avec le bouton droit sur "Enregistrer l'image sous ..." pour la télécharger sur votre ordinateur.