Đây là một thử thách đơn giản.
Nhiệm vụ là viết mã tạo ra hình ảnh vuông 450 * 448 với độ trong suốt 100%. Đầu ra phải tuân theo các quy tắc hình ảnh tiêu chuẩn .
Đây là một thử thách đơn giản.
Nhiệm vụ là viết mã tạo ra hình ảnh vuông 450 * 448 với độ trong suốt 100%. Đầu ra phải tuân theo các quy tắc hình ảnh tiêu chuẩn .
Câu trả lời:
convert -size 448x448 xc:none a.png
Điều này có được phép không?
\windows\system32
).
convert
công cụ, vì tên này đụng độ với tiện ích hệ thống. Bạn chạy magick convert ...
thay.
convert
là một phần của ImageMagick, vì vậy gọi nó là ngôn ngữ của chính nó sẽ không hoạt động.
ImageMagick Convert
. Có thể đáng để mở một meta về nó mặc dù
Chương trình đầy đủ. In mảng 448-by-448-by-4 đại diện cho hình ảnh 448-by-448 rgba.
448 448 4⍴0
⍴
là r eshape
448 448
?
802832p0
câu trả lời?
f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());
Trả về hình ảnh PNG được mã hóa dưới dạng dữ liệu: URL phù hợp, ví dụ: để đặt làm hình ảnh src
của một HTMLImageElement
. Chỉnh sửa: Đã lưu 3 byte nhờ @Shaggy và thêm 2 byte nhờ @Arnauld.
document.createElement`canvas`
nên hoạt động, tiết kiệm thêm 2 byte.
d=document
ở đầu và thay thế document
bằng d
? Nên lưu ~ 5 ký tự.
document.write
chỉ là một phần của đoạn trích ngăn xếp, không phải là một phần của hàm, vì vậy dù sao nó cũng không được tính.
v->new int[448][448][4]
Trả về một mảng 3D có kích thước 448x448x4 0s.
Giải trình:
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]
Trả về ma trận 448x448 là 0s.
Trong Java, các giá trị RGBA có thể được biểu diễn bằng một số nguyên . Hệ thập lục phân 0x00000000
sẽ đại diện 00
cho màu đỏ, xanh lá cây, xanh dương và alpha tương ứng. Và 0x00000000
bằng số nguyên 0
.
v->new int[448][448]
sao? Bởi vì một màu có thể được biểu diễn bằng một số nguyên (RGBA) trong Java.
0-255
có phải là giá trị RBGA hợp lệ không? Tôi biết đó là một giá trị RGB hợp lệ, nhưng cũng là RGBA? Tôi gần như không bao giờ sử dụng hình ảnh trong Java, vì vậy không quá quen thuộc với chúng. Tôi chỉ đơn giản dựa vào 4 số 0 bên trong của mình cho các câu trả lời khác.
0x00000000
phù hợp với số nguyên. 2 chữ số hex đầu tiên là Alpha, 2 chữ số tiếp theo là màu đỏ, 2 chữ số tiếp theo là màu xanh lá cây, 2 chữ số cuối cùng là màu xanh. Vì vậy, bạn chỉ cần một số nguyên. Xem BufferedImage.TYPE_INT_ARGB . Bạn có 4 giá trị, được tóm tắt là một số nguyên. Và 0x00000000
bằng 0
.
Lưu hình ảnh vào một tệp có đường dẫn s
, 101 byte
s->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",new java.io.File(s))
Dùng thử trực tuyến ... bằng cách nào đó
Trả lại BufferedImage, 46 byte
v->new java.awt.image.BufferedImage(448,448,2)
Lưu hình ảnh vào tập tin f
, 83 byte
f->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",f)
Kết xuất PNG thành STDOUT, 92 byte (chỉ cảm ơn ASCII!)
v->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",System.out)
Hãy thử trực tuyến!
Cảm ơn Kevin vì đã tiết kiệm một byte cho các giải pháp thứ hai và thứ tư!
()->
theo hai câu trả lời của mình v->
, vì nó được phép có một đầu vào không sử dụng trống (mà cá nhân tôi sử dụng Void
). TIO cuối cùng của bạn sau đó sẽ là này .
448LDδ4Å0
Hay cách khác:
¾4Ž1ÂDиии
-2 byte nhờ @Emigna .
-1 byte nhờ @Adnan .
Xuất ra một danh sách 3D có kích thước 448x448x4.
Giải trình:
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)
Xem 05AB1E câu trả lời này của tôi (phần Làm thế nào để nén các số nguyên lớn? ) Để hiểu tại sao Ž1Â
là 448
.
[[[0]*4]*488]*488
Với bản in:
print[[[0]*4]*488]*488
Như biến:
x=[[[0]*4]*488]*488
Vì một mảng RGBA được cho phép, đó là những gì tôi đã tạo ở trên, mặc định là tất cả 0 - có nghĩa là màu đen, nhưng hoàn toàn trong suốt.
[0]*802816
nó cũng hoạt động.
448ṁ4¬¥þ
Một liên kết niladic mang lại một mảng màu đen trong suốt có kích thước 448 x 448 RGBA.
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]
Điều này có hợp lệ không?
<svg height=448 width=448
Kiểm tra nó ( background
áp dụng với CSS để bạn có thể "nhìn thấy" nó)
<svg height=448 width=448
vào một tệp html và mở nó sẽ tạo ra một sản phẩm nào <body>
. Tuy nhiên , với độ chính xác là 1 byte, nếu bạn viết <svg height=448 width=448>
, nó sẽ tạo ra một <body>
hình ảnh SVG trống.
>
có nghĩa là điều này thực sự hợp lệ, theo như cách đánh dấu.
<!DOCTYPE html>
, <html>
, <head>
, <style>
, <script>
và tất cả mọi thứ đi vào <body>
. Một số mã bổ sung được yêu cầu để tạo đầu ra mong muốn. Bạn có thể thấy rằng mã kết quả được phân tích cú pháp dưới dạng <svg height="448" width="448" < body></svg>
, bởi vì nó ghi <svg height=448 width=448 </body>
trong iframe. Như vậy, tôi vẫn tin rằng nó không hợp lệ.
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);}
Điều này ghi một tệp o.tga thực tế, có thể đọc được, không có bất kỳ thư viện hoặc hàm dựng sẵn nào, sử dụng định dạng nhị phân TGA cho mỗi http://paulbourke.net/dataformats/tga/ , bằng cách mã hóa chiều rộng và chiều cao vào tiêu đề tệp nhị phân.
-5 byte rút ngắn tên tệp, sửa kích thước img, chỉ @ ASCII
a
sẽ làm việc như tên tập tin sẽ không. btw đó là 448 * 448 chứ không phải 444 * 444 nên điều này không hợp lệ
[255,0,0,0,0]
6272 lần ( [0,0,0,0]
128 lần, lặp lại 6272 lần). Loại hình ảnh sau đó sẽ 10
không 2
. Thậm chí tốt hơn, colormap để mã hóa thời lượng chạy ngắn hơn ( 0,0,0,0
-> 0
)
_=>(Enumerable.Repeat((0,0,0,0),200704),448,448)
Rõ ràng đầu ra [1D array of pixels, width, height]
là ok, vì vậy điều này tạo ra một bộ `(vô số pixel, chiều rộng, chiều cao).
_=>Enumerable.Repeat(Enumerable.Repeat((0,0,0,0),448),448)
Ma trận ban đầu trả lời.
Do quy tắc IO của hình ảnh cho phép xuất ra dưới dạng ma trận các giá trị RGB, bài nộp này xuất ra ma trận các giá trị RGBA, được biểu thị bằng các bộ dữ liệu với bốn giá trị, tất cả đều bằng 0.
Đáng buồn thay, PHP hơi tệ ở khía cạnh đó bởi vì nó đòi hỏi rất nhiều mã. Nhưng một lần nữa, PHP không hút.
$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');
Ung dung:
$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
Rõ ràng, nếu bạn chỉ muốn tạo nó mà không xuất ra nó, bạn có thể bỏ qua các lệnh header()
và readfile()
. Tuy nhiên, nó thật dài.
'<?php return '.var_export(array_fill(0,952576,0),1).';';
để xuất mảng theo cách thực thi. bạn có thể làm php -f image.php > array.php
và ở một nơi khác bạn có thể làm $array = include('array.php');
để có một mảng có thể sử dụng lại. Nhưng tôi không biết nó có hợp lệ hay không, vì vậy, tôi sẽ đưa nó cho bạn để thêm vào như một giải pháp thay thế. Hoặc thậm chí là a <?=json_encode(array_fill(0,952576,0));
.
true
có thể được thay thế bằng 1
, để tiết kiệm 3 byte. Đọc tài liệu của imagepng()
, bạn chỉ có thể làm header('Content-type: image/png');imagepng($i);
. Tôi tin rằng bạn cũng có thể thay thế $b=imagecolorallocatealpha($i,0,0,0,127);imagefill($i,0,0,$b);
với imagefill($i,0,0,imagecolorallocatealpha($i,0,0,0,127));
nhưng không báo cho tôi về điều đó.
<? imagecolorallocatealpha($i=imagecreate(448,448),0,0,0,127);header('Content-type: image/png');imagepng($i);
tạo ra một hình ảnh trong suốt (109 byte). Tự động gửi hình ảnh đến trình duyệt / đầu ra tiêu chuẩn và mọi thứ.
Python 3.7 - PIL được nhập, 30 byte
Image.new("LA",[448]*2).show()
Điều này yêu cầu nhập nhưng có lợi ích là tạo và hiển thị tệp hình ảnh thực tế chứ không phải là một mảng trống trừu tượng.
Giải trình:
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 () sẽ mở hình ảnh trong chương trình hình ảnh mặc định của bạn. Trong trường hợp của tôi, điều này sẽ mở một tệp bitmap tạm thời trong Windows Photo Viewer nhưng kết quả có thể khác nhau. Có thể cho rằng đây là gian lận vì biểu diễn bitmap không có độ trong suốt
Biến thể ...
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)
Tạo ma trận NaN
giá trị 448 x 448 , sau đó sử dụng imwrite
để lưu chúng vào tệp PNG có tên '.png'
và đặt độ trong suốt thành 1, làm cho nó trong suốt. Tên 'Transparency'
tham số có thể được viết tắt 'tr'
là MATLAB cho phép khớp chuỗi một phần của các tên tham số miễn là phiên bản rút gọn là duy nhất trong số các tham số có sẵn.
{P5.img⍴∘0,⍨448}
Chức năng xuất ra một đối tượng hình ảnh có thể được vẽ lên màn hình (không có hiệu ứng) hoặc chuyển đổi trở lại giá trị pixel.
-2 cảm ơn ngn !
{P5.img⍴∘0,⍨448}
2¡
có thể⁺
a: make image![448x448 0.0.0.255]
Độ mờ mặc định hoàn toàn mờ đục (0)
Đây là cách sử dụng nó / một chương trình đầy đủ /:
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
Phương pháp này tiết kiệm 1 byte so với "tiêu chuẩn" ♦7*_4º*a*a*
_=>[w=448,w,Array(w*w).fill([0,0,0,0])]
Rõ ràng xuất ra [height, width, 1d array of RGBA values]
là ok.
-3 byte nhờ @Arnauld
[1D array of pixels, width, height]
DIM A[448,448]SAVE"DAT:I",A
Lưu một mảng 448x448 2 chiều chứa đầy 0 vào một tệp có tên DAT:I
(bằng cách nào đó ngắn hơn xác định hàm trả về mảng, bằng cách nào đó)
Các định dạng tiêu chuẩn (được sử dụng bởi tất cả các chức năng đồ họa) cho màu sắc trong SmileBASIC là ARGB 32 bit và 16 bit 5551 RGBA và 0
trong suốt ở cả hai.
ARGB
định dạng 4 byte (thường được sử dụng trong Smilebasic), do đó 0x00000000
Alpha = 0, Red = 0, Green = 0, Blue = 0. Đen sẽ là 0xFF000000
.
GRP
nhưng tôi sẽ để nó đi vì dữ liệu thực tế được lưu trữ là như nhau.
Text"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
Base64Encode Decode
ResizeImage 448
Lấy một gif trong suốt 1x1 được mã hóa thành base64 và thay đổi kích thước của nó
♪☺ü@/øP♦£Q)%)£Q◄úæD)%)£Q
Giải trình
♪☺ü@ # 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");}
Nhấp vào "Chạy đoạn mã" sẽ tạo ra một PNG trong suốt có kích thước 448x448 trong IFRAME. Sau đó, bạn có thể nhấp chuột phải vào "Lưu hình ảnh dưới dạng ..." để tải xuống máy tính của mình.