To proste wyzwanie.
Zadanie polega na napisaniu kodu, który generuje kwadratowy obraz 448 * 448 ze 100% przezroczystością. Dane wyjściowe powinny być zgodne ze standardowymi regułami obrazu .
To proste wyzwanie.
Zadanie polega na napisaniu kodu, który generuje kwadratowy obraz 448 * 448 ze 100% przezroczystością. Dane wyjściowe powinny być zgodne ze standardowymi regułami obrazu .
Odpowiedzi:
convert -size 448x448 xc:none a.png
Czy to jest dozwolone?
\windows\system32
).
convert
narzędziem, ponieważ nazwa koliduje z narzędziem systemowym. Zamiast magick convert ...
tego biegniesz .
convert
jest częścią ImageMagick, więc nazwanie go własnym językiem nie działałoby.
ImageMagick Convert
. Być może warto jednak otworzyć meta na ten temat
Pełny program Drukuje tablicę 448 na 448 na 4, reprezentującą obraz rgba 448 na 448.
448 448 4⍴0
⍴
Jest r eshape
448 448
?
802832p0
jako odpowiedź?
f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());
Zwraca obraz PNG zakodowane jako dane: URL odpowiedniej np do ustawiania jak src
z HTMLImageElement
. Edycja: Zapisano 3 bajty dzięki @Shaggy i kolejne 2 bajty dzięki @Arnauld.
document.createElement`canvas`
powinien działać, oszczędzając 2 kolejne bajty.
d=document
na górze i wymienić document
z d
? Powinny zaoszczędzić ~ 5 znaków.
document.write
tylko część fragmentu stosu, a nie część funkcji, więc i tak się nie liczy.
v->new int[448][448][4]
Zwraca tablicę 3D o wymiarach 448 x 448 x 4 0.
Wyjaśnienie:
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]
Zwraca macierz 448 x 448 równą 0.
W Javie wartości RGBA mogą być reprezentowane przez liczbę całkowitą . Szesnastkowy 0x00000000
reprezentuje odpowiednio 00
czerwony, zielony, niebieski i alfa. I 0x00000000
jest równa liczbie całkowitej 0
.
v->new int[448][448]
? Ponieważ kolor można przedstawić w Javie za pomocą liczby całkowitej (RGBA).
0-255
jest prawidłową wartością RBGA? Wiem, że to poprawna wartość RGB, ale także RGBA? Prawie nigdy nie używam obrazów w Javie, więc nie znam ich zbyt dobrze. Po prostu oparłem moje 4 wewnętrzne 0 na innych odpowiedziach.
0x00000000
pasujące do int. Pierwsze 2 cyfry szesnastkowe to Alfa, następne 2 to czerwony, następne 2 to zielony, ostatnie 2 to niebieski, więc potrzebujesz tylko liczby całkowitej. Zobacz BufferedImage.TYPE_INT_ARGB . Masz 4 wartości podsumowane jako jedna liczba całkowita. I 0x00000000
jest równy 0
.
Zapisywanie obrazu do pliku ze ścieżką s
, 101 bajtów
s->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",new java.io.File(s))
Wypróbuj online ... jakoś
Zwracając buforowany obraz, 46 bajtów
v->new java.awt.image.BufferedImage(448,448,2)
Zapis obrazu do pliku f
, 83 bajty
f->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",f)
Zrzucanie PNG do STDOUT, 92 bajty (tylko dzięki ASCII!)
v->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",System.out)
Wypróbuj online!
Dzięki Kevinowi za zapisanie bajtu dla drugiego i czwartego rozwiązania!
()->
w dwóch swoich odpowiedziach v->
, ponieważ dozwolone są puste, niewykorzystane dane wejściowe (do których osobiście korzystam Void
). Twoje ostatnie TIO byłoby wtedy tym .
448LDδ4Å0
lub alternatywnie:
¾4Ž1ÂDиии
-2 bajty dzięki @Emigna .
-1 bajt dzięki @Adnan .
Generuje listę 3D 048 x 448 x 4.
Wyjaśnienie:
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)
Zobacz moją odpowiedź 05AB1E (sekcja Jak skompresować duże liczby całkowite? ), Aby zrozumieć, dlaczego tak Ž1Â
jest 448
.
[[[0]*4]*488]*488
Z nadrukiem:
print[[[0]*4]*488]*488
Jako zmienna:
x=[[[0]*4]*488]*488
Ponieważ tablica RGBA jest dozwolona, to właśnie stworzyłem powyżej, domyślnie wszystkie zera - co oznacza czarny, ale całkowicie przezroczysty.
[0]*802816
że to również powinno działać.
448ṁ4¬¥þ
Niladyczne łącze, które daje tablicę 448 na 448 RGBA przezroczystych czarnych pikseli.
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]
Czy to jest ważne?
<svg height=448 width=448
Przetestuj ( background
zastosowano z CSS, abyś mógł go „zobaczyć”)
<svg height=448 width=448
do pliku HTML i otwarcie go powoduje utworzenie pustego pliku <body>
. Jednak z karą 1 bajtu, jeśli piszesz <svg height=448 width=448>
, tworzy <body>
pusty obraz SVG.
>
oznacza, że jest to rzeczywiście poprawne, o ile znaczniki się znajdują.
<!DOCTYPE html>
, <html>
, <head>
, <style>
, <script>
i wszystko idzie do <body>
. Część dodatkowego kodu jest wymagana do uzyskania pożądanego wyniku. Możesz zobaczyć, że wynikowy kod jest analizowany jako <svg height="448" width="448" < body></svg>
, ponieważ zapisuje go <svg height=448 width=448 </body>
w ramce iframe. W związku z tym nadal uważam, że to nie jest poprawne.
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);}
Spowoduje to zapisanie rzeczywistego, czytelnego pliku o.tga, bez żadnych bibliotek ani wbudowanych funkcji, przy użyciu formatu binarnego TGA pod adresem http://paulbourke.net/dataformats/tga/ , poprzez twarde kodowanie szerokości i wysokości w nagłówku pliku binarnego.
-5 bajtów skraca nazwę pliku, naprawia rozmiar obrazu, tylko @ ASCII
a
działałby tak, jak nazwa pliku nie. btw to 448 * 448, a nie 444 * 444, więc jest to nieprawidłowe
[255,0,0,0,0]
6272 razy ( [0,0,0,0]
128 razy powtórzone 6272 razy) typ obrazu będzie wówczas. 10
nie 2
nawet lepiej, colormap dla krótszego RLE (. 0,0,0,0
-> 0
)
_=>(Enumerable.Repeat((0,0,0,0),200704),448,448)
Wygląda na [1D array of pixels, width, height]
to, że wyjście jest w porządku, więc daje to krotkę `(IEnumerable pikseli, szerokość, wysokość).
_=>Enumerable.Repeat(Enumerable.Repeat((0,0,0,0),448),448)
Oryginalna macierz zwracająca odpowiedź.
Ponieważ reguły we / wy obrazu zezwalają na wyprowadzanie jako macierz wartości RGB, to przesłanie generuje macierz wartości RGBA, reprezentowanych przez krotki z czterema wartościami, wszystkie o wartości 0.
Niestety, PHP w pewnym stopniu jest do bani w tym aspekcie, ponieważ wymaga dużo kodu. Ale z drugiej strony, gdzie PHP nie jest do kitu.
$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');
Nie golfowany:
$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
Oczywiście, jeśli chcesz go utworzyć bez wypisywania go, możesz pominąć polecenia header()
i readfile()
. Mimo to jest idiotycznie długi.
'<?php return '.var_export(array_fill(0,952576,0),1).';';
do wyeksportowania tablicy w sposób wykonywalny. możesz zrobić php -f image.php > array.php
, a gdzie indziej możesz zrobić, $array = include('array.php');
aby znów mieć użyteczną tablicę. Ale nie wiem, czy jest poprawny, więc daję ci to, aby dodać jako alternatywę. Lub nawet <?=json_encode(array_fill(0,952576,0));
.
true
można go zastąpić 1
, aby zapisać 3 bajty. Po przeczytaniu dokumentacji imagepng()
możesz to zrobić header('Content-type: image/png');imagepng($i);
. Wierzę, że można również wymienić $b=imagecolorallocatealpha($i,0,0,0,127);imagefill($i,0,0,$b);
z imagefill($i,0,0,imagecolorallocatealpha($i,0,0,0,127));
ale nie zacytować mnie na to.
<? imagecolorallocatealpha($i=imagecreate(448,448),0,0,0,127);header('Content-type: image/png');imagepng($i);
utworzyłem przezroczysty obraz (109 bajtów). Automatycznie wysyła obraz do przeglądarki / standardowe wyjście i wszystko.
Python 3.7 - PIL Importowany, 30 bajtów
Image.new("LA",[448]*2).show()
Wymaga to importu, ale ma tę zaletę, że tworzy i wyświetla rzeczywisty plik obrazu zamiast abstrakcyjnej pustej tablicy.
Wyjaśnienie:
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 () otworzy obraz w twoim domyślnym programie graficznym. W moim przypadku powoduje to otwarcie tymczasowego pliku bitmapy w przeglądarce zdjęć systemu Windows, ale wyniki mogą się różnić. Prawdopodobnie jest to oszustwo, ponieważ reprezentacja mapy bitowej nie zawiera przezroczystości
Wariacje ...
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 bajtów.
imwrite(nan(448),'.png','tr',1)
Tworzy macierz NaN
wartości 448 x 448 , a następnie używa imwrite
do zapisania ich w pliku PNG o nazwie '.png'
i ustawia przezroczystość na 1, dzięki czemu jest przezroczysta. Nazwę 'Transparency'
parametru można skracać, 'tr'
ponieważ MATLAB pozwala na częściowe dopasowanie ciągów nazw parametrów, o ile skrócona wersja jest unikalna wśród dostępnych parametrów.
x4Wẋ448Ɗ⁺
Wysyła tablicę 448 x 448 x 4
Dzięki @JonathanAllan za uratowanie bajtu.
2¡
może być ⁺
a: make image![448x448 0.0.0.255]
Domyślnie krycie jest całkowicie nieprzezroczyste (0)
Oto jak go używać / pełny program /:
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
Ta metoda pozwala zaoszczędzić 1 bajt w porównaniu ze „standardowym” ♦7*_4º*a*a*
_=>[w=448,w,Array(w*w).fill([0,0,0,0])]
Najwyraźniej produkujący [height, width, 1d array of RGBA values]
jest w porządku.
-3 bajty dzięki @Arnauld
[1D array of pixels, width, height]
DIM A[448,448]SAVE"DAT:I",A
Zapisuje dwuwymiarową tablicę 448x448 wypełnioną zerami do pliku o nazwie DAT:I
(który jest krótszy niż zdefiniowanie funkcji, która w jakiś sposób zwraca tablicę)
Standardowe formaty (używane we wszystkich funkcjach graficznych) kolorów w SmileBASIC to 32-bitowy ARGB i 16-bitowy 5551 RGBA, i 0
oba są przezroczyste.
ARGB
formacie 4-bajtowym (powszechnie stosowane w Smilebasic), podobnie jak 0x00000000
Alpha = 0, Red = 0, Green = 0, Blue = 0. Czarny byłby 0xFF000000
.
GRP
ale zwolnię go, ponieważ rzeczywiste przechowywane dane są takie same.
Text"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
Base64Encode Decode
ResizeImage 448
Pobiera przezroczysty gif 1x1 zakodowany jako base64 i zmienia jego rozmiar
♪☺ü@/øP♦£Q)%)£Q◄úæD)%)£Q
Wyjaśnienie
♪☺ü@ # 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");}
Kliknięcie „Uruchom fragment kodu” wygeneruje przezroczysty plik PNG o wymiarach 448 x 448 w ramce IFRAME. Możesz następnie kliknąć prawym przyciskiem myszy „Zapisz obraz jako ...”, aby pobrać go na swój komputer.