Ini adalah tantangan sederhana.
Tugasnya adalah menulis kode yang menghasilkan gambar persegi 448 * 448 dengan transparansi 100%. Outputnya harus mengikuti aturan gambar standar .
Ini adalah tantangan sederhana.
Tugasnya adalah menulis kode yang menghasilkan gambar persegi 448 * 448 dengan transparansi 100%. Outputnya harus mengikuti aturan gambar standar .
Jawaban:
convert -size 448x448 xc:none a.png
Apakah ini diizinkan?
\windows\system32).
convertalat, karena namanya bentrok dengan utilitas sistem. Anda magick convert ... malah lari .
convertadalah bagian dari ImageMagick, jadi menyebutnya bahasa sendiri tidak akan berfungsi.
ImageMagick Convert. Mungkin layak membuka meta tentang hal itu
Program lengkap. Mencetak 448-by-448-by-4 array yang mewakili gambar 448-by-448 rgba.
448 448 4⍴0
⍴adalah r eshape
448 448?
802832p0sebagai jawabannya?
f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());
Mengembalikan gambar PNG yang disandikan sebagai data: URL yang cocok misalnya untuk pengaturan sebagai srcdari HTMLImageElement. Sunting: Disimpan 3 byte berkat @Shaggy dan 2 byte lebih lanjut berkat @Arnauld.
document.createElement`canvas` harus bekerja, menghemat 2 byte lebih banyak.
d=documentdi bagian atas dan ganti documentdengan d? Harus menyimpan ~ 5 karakter.
document.writehanya bagian dari potongan tumpukan, bukan bagian dari fungsi, jadi tidak masuk hitungan.
v->new int[448][448][4]
Mengembalikan array 3D sebesar 448x448x4 0s.
Penjelasan:
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]
Mengembalikan matriks 448x448 dari 0s.
Di Jawa, nilai-nilai RGBA dapat diwakili oleh integer . Heksadesimal 0x00000000akan mewakili masing 00-masing merah, hijau, biru, dan alfa. Dan 0x00000000sama dengan bilangan bulat 0.
v->new int[448][448]? Karena warna dapat direpresentasikan dengan integer (RGBA) di Java.
0-255nilai RBGA yang valid? Saya tahu ini adalah nilai RGB yang valid, tetapi juga RGBA? Saya hampir tidak pernah menggunakan gambar di Jawa, jadi tidak terlalu terbiasa dengannya. Saya hanya mendasarkan 4 batin saya pada jawaban lain.
0x00000000yang sesuai pada int. 2 digit hex pertama adalah Alpha, 2 berikutnya adalah merah, 2 berikutnya adalah hijau, 2 terakhir adalah biru. Jadi Anda hanya perlu integer. Lihat BufferedImage.TYPE_INT_ARGB . Anda memiliki 4 nilai, diringkas sebagai satu bilangan bulat. Dan 0x00000000sama dengan 0.
Menyimpan gambar ke file dengan path s, 101 byte
s->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",new java.io.File(s))
Coba online ... entah bagaimana
Mengembalikan BufferedImage, 46 byte
v->new java.awt.image.BufferedImage(448,448,2)
Menyimpan gambar ke file f, 83 byte
f->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",f)
Dumping PNG ke STDOUT, 92 byte (terima kasih ASCII saja!)
v->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",System.out)
Cobalah online!
Terima kasih kepada Kevin karena telah menyimpan byte untuk solusi kedua dan keempat!
()->dua jawaban Anda ke dalam v->, karena diizinkan memiliki input kosong yang tidak digunakan (yang saya gunakan secara pribadi Void). TIO terakhir Anda kemudian akan menjadi ini .
448LDδ4Å0
atau sebagai alternatif:
¾4Ž1ÂDиии
-2 byte terima kasih kepada @Emigna .
-1 byte terima kasih kepada @Adnan .
Menghasilkan daftar 3D 448x448x4 dari 0d.
Penjelasan:
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)
Lihat ini 05AB1E jawaban saya (bagian Cara kompres bilangan bulat besar? ) Untuk memahami mengapa Ž1Âadalah 448.
[[[0]*4]*488]*488
Dengan Cetak:
print[[[0]*4]*488]*488
Sebagai variabel:
x=[[[0]*4]*488]*488
Sebagai array RGBA diperbolehkan, itulah yang saya buat di atas, default ke semua 0's - yang berarti hitam, tetapi benar-benar transparan.
[0]*802816juga harus berhasil.
448ṁ4¬¥þ
Tautan niladic yang menghasilkan array 448 by 448 RGBA piksel hitam transparan.
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]
Apakah ini valid?
<svg height=448 width=448
Mengujinya ( backgroundditerapkan dengan CSS sehingga Anda dapat "melihatnya")
<svg height=448 width=448memasukkan ke dalam file html dan membukanya menghasilkan kosong <body>. Namun , dengan hukuman 1 byte, jika Anda menulis <svg height=448 width=448>, itu menghasilkan <body>gambar SVG kosong.
>berarti ini memang benar, sejauh markup berlangsung.
<!DOCTYPE html>, <html>, <head>, <style>, <script>dan semuanya berjalan dengan <body>. Beberapa kode tambahan diperlukan untuk menghasilkan output yang diinginkan. Anda dapat melihat bahwa kode yang dihasilkan diuraikan sebagai <svg height="448" width="448" < body></svg>, karena ia menulis <svg height=448 width=448 </body>di iframe. Karena itu, saya masih percaya itu tidak valid.
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);}
Ini menulis file o.tga yang sebenarnya dan dapat dibaca, tanpa fungsi pustaka atau builtin, menggunakan format biner TGA per http://paulbourke.net/dataformats/tga/ , dengan mengkode keras lebar dan tinggi ke header file biner.
-5 byte mempersingkat nama file, memperbaiki ukuran img, hanya @ ASCII
aakan berfungsi sebagai nama file kan? btw itu 448 * 448 bukan 444 * 444 jadi ini tidak valid
[255,0,0,0,0]6272 kali ( [0,0,0,0]128 kali, ulangi 6272 kali) .jenis gambar 10tidak akan 2. bahkan lebih baik, colormap untuk pengkodean panjang lintasan yang lebih pendek ( 0,0,0,0-> 0)
_=>(Enumerable.Repeat((0,0,0,0),200704),448,448)
Ternyata keluaran [1D array of pixels, width, height]ok, jadi ini menghasilkan tuple `(IEnumerable piksel, lebar, tinggi).
_=>Enumerable.Repeat(Enumerable.Repeat((0,0,0,0),448),448)
Matriks asli mengembalikan jawaban.
Karena aturan IO gambar memungkinkan output sebagai matriks nilai RGB, pengiriman ini menghasilkan matriks nilai RGBA, yang diwakili oleh tupel dengan empat nilai, semuanya 0.
Sayangnya, PHP agak menyebalkan dalam aspek itu karena membutuhkan banyak kode. Tapi sekali lagi, di mana PHP tidak payah.
$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');
Tidak Disatukan:
$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
Jelas, jika Anda hanya ingin membuatnya tanpa mengeluarkannya, Anda dapat menghilangkan header()dan readfile()memerintahkannya. Tetap saja, ini panjang sekali.
'<?php return '.var_export(array_fill(0,952576,0),1).';';untuk mengekspor array dengan cara yang dapat dieksekusi. Anda dapat melakukannya php -f image.php > array.php, dan di tempat lain Anda dapat melakukannya $array = include('array.php');untuk memiliki array yang dapat digunakan lagi. Tapi saya tidak tahu apakah itu valid, jadi, saya berikan kepada Anda untuk ditambahkan sebagai alternatif. Atau bahkan a <?=json_encode(array_fill(0,952576,0));.
truebisa diganti dengan 1, untuk menghemat 3 byte. Membaca dokumentasi imagepng(), Anda bisa melakukannya header('Content-type: image/png');imagepng($i);. Saya percaya Anda juga bisa menggantinya $b=imagecolorallocatealpha($i,0,0,0,127);imagefill($i,0,0,$b);dengan imagefill($i,0,0,imagecolorallocatealpha($i,0,0,0,127));tetapi jangan mengutip saya tentang itu.
<? imagecolorallocatealpha($i=imagecreate(448,448),0,0,0,127);header('Content-type: image/png');imagepng($i);menghasilkan gambar transparan (109 byte). Secara otomatis mengirim gambar ke browser / output standar dan semuanya.
Python 3.7 - PIL Diimpor, 30 byte
Image.new("LA",[448]*2).show()
Ini membutuhkan impor tetapi memiliki manfaat membuat dan menampilkan file gambar yang sebenarnya daripada array kosong abstrak.
Penjelasan:
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 () akan membuka gambar di program gambar default Anda. Dalam kasus saya ini membuka file bitmap sementara di Windows Photo Viewer tetapi hasilnya dapat bervariasi. Bisa dibilang ini curang karena representasi bitmap tidak mengandung transparansi
Variasi ...
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)
Membuat matriks NaNnilai 448 x 448 , dan kemudian gunakan imwriteuntuk menyimpannya ke file PNG bernama '.png'dan mengatur transparansi ke 1, menjadikannya transparan. Nama 'Transparency'parameter dapat disingkat menjadi 'tr'sebagai MATLAB memungkinkan untuk pencocokan string parsial nama parameter selama versi singkat adalah unik di antara parameter yang tersedia.
x4Wẋ448Ɗ⁺
Output array 448x448x4
Terima kasih kepada @JonathanAllan karena telah menghemat satu byte.
2¡bisa⁺
a: make image![448x448 0.0.0.255]
Default opacity menjadi sepenuhnya buram (0)
Ini adalah bagaimana menggunakannya / program lengkap /:
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
Metode ini menghemat 1 byte dibandingkan dengan "standar" ♦7*_4º*a*a*
_=>[w=448,w,Array(w*w).fill([0,0,0,0])]
Ternyata keluarannya [height, width, 1d array of RGBA values]ok.
-3 byte terima kasih kepada @Arnauld
[1D array of pixels, width, height]
DIM A[448,448]SAVE"DAT:I",A
Menyimpan array 448x448 2 dimensi yang diisi dengan 0s ke file bernama DAT:I (Yang lebih pendek daripada mendefinisikan fungsi yang mengembalikan array, entah bagaimana)
Format standar (digunakan oleh semua fungsi grafik) untuk warna dalam SmileBASIC adalah 32 bit ARGB dan 16 bit 5551 RGBA, dan 0transparan pada keduanya.
ARGBformat 4 byte (biasanya digunakan dalam Smilebasic), demikian 0x00000000juga Alpha = 0, Red = 0, Green = 0, Blue = 0. Hitam 0xFF000000.
GRPtetapi saya akan membiarkannya karena data aktual yang disimpan adalah sama.
Text"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
Base64Encode Decode
ResizeImage 448
Mengambil gif transparan 1x1 yang disandikan sebagai base64 dan mengubah ukurannya
♪☺ü@/øP♦£Q)%)£Q◄úæD)%)£Q
Penjelasan
♪☺ü@ # 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");}
Mengklik "Jalankan cuplikan kode" akan menghasilkan PNG transparan 448x448 dalam IFRAME. Anda kemudian dapat mengklik kanan "Simpan gambar sebagai ..." untuk mengunduhnya ke komputer Anda.