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).
convertnarzędziem, ponieważ nazwa koliduje z narzędziem systemowym. Zamiast magick convert ... tego biegniesz .
convertjest 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?
802832p0jako odpowiedź?
f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());
Zwraca obraz PNG zakodowane jako dane: URL odpowiedniej np do ustawiania jak srcz 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=documentna górze i wymienić documentz d? Powinny zaoszczędzić ~ 5 znaków.
document.writetylko 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 0x00000000reprezentuje odpowiednio 00czerwony, zielony, niebieski i alfa. I 0x00000000jest 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-255jest 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.
0x00000000pasują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 0x00000000jest 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 ( backgroundzastosowano z CSS, abyś mógł go „zobaczyć”)
<svg height=448 width=448do 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
adział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. 10nie 2nawet 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));.
truemoż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 NaNwartości 448 x 448 , a następnie używa imwritedo 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 0oba są przezroczyste.
ARGBformacie 4-bajtowym (powszechnie stosowane w Smilebasic), podobnie jak 0x00000000Alpha = 0, Red = 0, Green = 0, Blue = 0. Czarny byłby 0xFF000000.
GRPale 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.