制作透明的448 * 448图像


10

这是一个简单的挑战。

任务是编写代码,以100%的透明度输出448 * 448的正方形图像。输出应遵循标准图像规则


7
是什么阻止人们提交一个0字节的答案,该答案将“透明”(不可见)图像“输出”到屏幕上?
19Me21年

9
@ 12Me21会是448 * 448吗?
阿努什

2
这是对stackoverflow一个封闭问题的模仿(或至少受其启发)吗?
Foon

2
448像素有什么特别之处?
dan04 '19

1
@Foon绝对不是模仿,但我肯定有足够的兴趣在询问SO之前,才意识到这里会更加有趣。
阿努什

Answers:


28

Imagemagick在某些外壳上,35

convert -size 448x448 xc:none a.png

可以吗?


5
重击,我猜呢?这就是我测试时使用的方式。任何POSIX外壳都可以工作吗?
vityavv

3
在Windows中也可以使用(如果ImageMagick在之前的PATH中\windows\system32)。
CL。

1
在Windows上,ImageMagick没有随convert工具一起提供,因为名称与系统实用程序冲突。您magick convert ... 改为跑步。
n0rd

1
@SztupY the convert是ImageMagick的一部分,因此将其称为自己的语言将不起作用。
vityavv

1
这是一个自己的命令。您可以说您使用的语言是ImageMagick Convert。也许值得对此进行一些介绍
SztupY

15

APL(Dyalog Unicode),11 字节SBCS

完整程序。打印代表448×448 rgba图像的448×448×4数组。

448 448 40

在线尝试!

- [R ESHAPE


我一点都不了解APL,但是我想它没有复制品448 448吗?
凯文·克鲁伊森

448 * 448 = 200704,所以您不能用200704替换448 448分隔的空格,节省1个字节吗?
NaCl

1
@NaCl在这种情况下,为什么不将其乘以4并得到802832p0答案呢?
约翰·汉密尔顿

@NaCl因为这不是默认规则中有效的图像格式之一。
亚当

@JohnHamilton出于与我对NaCl的回答相同的原因。
亚当

8

70岁

import i"image";func a()i.Image{return i.NewRGBA(i.Rect(0,0,448,448))}

以前从未在Go中看过高尔夫球。定义一个称为a的函数,该函数输出图像


2
称其为Go-lf。
斯凯勒

6

JavaScript(ES6),74 69字节

f=
(_=document.createElement`canvas`)=>_.toDataURL(_.height=_.width=448)
;document.write(f());

返回编码为一个数据PNG图像:URL适用于例如设置为srcHTMLImageElement。编辑:感谢@Shaggy节省了3个字节,感谢@Arnauld节省了2个字节。



2
document.createElement`canvas` 应该工作,再节省2个字节。
Arnauld

1
如果createelement有效,将看到document.body并使用id成为变量的事实有效吗?以及堆栈摘要pls
仅ASCII的

1
您可以d=document在顶部添加类似内容并替换documentd吗?应保存〜5个字符。
路加福音

1
@Luke document.write只是堆栈代码段的一部分,而不是函数的一部分,因此无论如何都不会计数。
尼尔

6

Java 8、23(或20)个字节

v->new int[448][448][4]

返回448x448x4 0s的3D数组。

在线尝试。

说明:

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]

返回0x的448x448矩阵。

在Java中,RGBA值可以由integer表示。十六进制分别0x00000000代表00红色,绿色,蓝色和alpha。并且0x00000000等于整数0

在线尝试。


啊啊啊,喜欢它:-)不能简单地使用v->new int[448][448]吗?因为在Java中颜色可以用整数(RGBA)表示。
奥利维尔·格雷戈雷(OlivierGrégoire)

@OlivierGrégoire不,我需要每个448x448像素四个0作为RBGA值。编辑:嗯..是0-255一个有效的RBGA值的整数吗?我知道这是有效的RGB值,但也可以是RGBA?我几乎从不使用Java中的图像,因此对它们不太熟悉。我只是将我的4个内部0基于其他答案。
凯文·克鲁伊森

是的,0x00000000一个int可以容纳四个0(十六进制)。前2个十六进制数字是Alpha,后2个是红色,后2个是绿色,后2个是蓝色,因此您只需要一个整数。请参阅BufferedImage.TYPE_INT_ARGB。您有4个值,汇总为一个整数。和0x00000000等于0
奥利维尔·格雷戈尔(OlivierGrégoire),

我认为这是2年来的第一次,我已经看到Java实际上具有竞争力!
毛茸茸的

@Shaggy围绕着这些高尔夫语言,它的竞争力还不那么强。.此外,过去我还有其他一些半竞争性的Java答案,比如这个,或者直到Bash出现之前,这个赢了(R打高尔夫回答)。
凯文·克鲁伊森

6

Java 8


将图像保存到路径为s101字节的文件中

s->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",new java.io.File(s))

在线尝试...以某种方式

返回BufferedImage,46个字节

v->new java.awt.image.BufferedImage(448,448,2)

将图像保存到文件f,83个字节

f->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",f)

将PNG转储到STDOUT中,为92个字节(感谢仅ASCII!)

v->javax.imageio.ImageIO.write(new java.awt.image.BufferedImage(448,448,2),"png",System.out)

在线尝试!
感谢Kevin为第二和第四解决方案节省了一个字节!


2
你是说是空的还是透明的?
Anush

1
只要写到标准输出
ASCII-仅

1
@@ only ASCII因此,将一个空的(用零填充)448 * 448 * 4数组写入stdout吗?无论如何,我喜欢创建实际的PNG文件的想法。
本杰明·厄克特

1
您可以()->在的两个答案中打入v->,因为允许使用一个空的未使用输入(我个人使用Void)。然后,您的最后一个TIO将是这个
凯文·克鲁伊森

1
@NahuelFouilleul,因为我想输出实际图像,而不是一个像素的逐个像素表示
Benjamin Urquhart

6

05AB1E12 10 9 字节

448LDδ4Å0

在线尝试。

或者:

¾4Ž1ÂDиии

在线尝试。

-2个字节,感谢@Emigna
-1个字节感谢@Adnan

输出0的448x448x4 3D列表。

说明:

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)

请参阅我的05AB1E答案(如何压缩大整数?部分以了解原因Ž1Â448


5

处理,66字节

PGraphics g=createGraphics(448,448);g.beginDraw();g.save("a.png");

5

Python 2.7,17个字节(22个带打印)

[[[0]*4]*488]*488

带打印:

print[[[0]*4]*488]*488

作为变量:

x=[[[0]*4]*488]*488

由于允许使用RGBA数组,这就是我在上面创建的,默认为全0,表示黑色,但完全透明。

在线尝试!


再次,用这个,只需手动乘以,您就[0]*802816应该也可以使用。
约翰·汉密尔顿

1
@JohnHamilton如果我错了,请纠正我,但我确实相信它必须是3D数组(像素行的数组),即array [pixel x coord] [pixel y coord] [r / g / b /一个]
Snaddyvitch饮水机

1
不太简洁,但是这里有一种替代方法可以将零放入一个numpy数组中... np.zeros([4] + [448] * 2)
P. Hopkinson

5

果冻,8 字节

448ṁ4¬¥þ

一个尼拉度链接,产生一个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]

5

HTML,25个字节

这有效吗?

<svg height=448 width=448

测试它background与CSS一起应用,因此您可以“看到”它)


我不认为这是有效的,因为<svg height=448 width=448将其写入html文件并将其打开会产生一个empty <body>但是,如果写入1个字节,则将<svg height=448 width=448>产生一个<body>带有空SVG图像的。
Ismael Miguel

@IsmaelMiguel,我们通过语言的解释器而不是(预期的)实现来定义语言。存在一个解释器(在本示例中为CodePen)允许我们省略关闭>,这意味着就标记而言,这确实是有效的。
毛茸茸的

1
Codepen添加了其他HTML代码以使其正常工作。它增加了一个<!DOCTYPE html><html><head><style><script>,一切都进行的<body>。需要一些附加代码才能产生所需的输出。您会看到结果代码被解析为<svg height="448" width="448" < body></svg>,因为它写入<svg height=448 width=448 </body>了iframe。因此,我仍然认为这是无效的。
Ismael Miguel


5

锈- 206个 201 168字节

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);}

通过按照http://paulbourke.net/dataformats/tga/的TGA二进制格式,通过将宽度和高度硬编码到二进制文件头中,从而编写了一个实际的,可读的o.tga文件,没有任何库或内置函数。


-5字节缩短文件名,固定img大小,仅@ASCII


它是否需要打印到文件中?:P
ASCII码,仅ASCII

它甚至需要是二维的吗?我可以说[0; 444 * 444 * 4]; 说我创建了一个444x444透明图像。即时通讯使它变得有趣。
唐明亮

a可以像文件名一样工作。顺便说一句,它是448 * 448而不是444 * 444,所以这是无效的
仅使用ASCII

糟糕,哈哈,谢谢
明亮的

为了使它更加有趣,请对游程长度进行编码:P(图像数据应为[255,0,0,0,0]6272次([0,0,0,0]128次,重复6272次)。然后图像类型将10不再2。更好,对于较短的游程编码(0,0,0,0-> 0
仅ASCII的

4

C#(Visual C#交互式编译器),48字节

_=>(Enumerable.Repeat((0,0,0,0),200704),448,448)

显然输出[1D array of pixels, width, height]是可以的,所以这将输出一个元组((像素,宽度,高度的IEnumerable)。

在线尝试!

C#(Visual C#交互式编译器),58字节

_=>Enumerable.Repeat(Enumerable.Repeat((0,0,0,0),448),448)

原始矩阵返回答案。

由于图像IO规则允许将输出作为RGB值矩阵,因此此提交将输出RGBA值矩阵,该矩阵由具有四个值(均为0)的元组表示。

在线尝试!


4

PHP,192字节

可悲的是,PHP有点烂,因为它需要大量的代码。但是话又说回来,PHP并不烂。

$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');

取消高尔夫:

$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

显然,如果只想创建而不输出它,则可以省略header()and readfile()命令。尽管如此,它仍然是愚蠢的。


1
从积极的方面来说,这是最“易读”的答案,它准确表明了它的作用
明亮的

@donbright并不是真正意义上的代码go tho。; P但是,我猜没有其他方法可以在PHP中做到这一点,除非我只是回显一些HTML。
YU NO WORK

@YUNOWORK根据规则,您可以导出数组。您可以使用'<?php return '.var_export(array_fill(0,952576,0),1).';';以可执行方式导出阵列。您可以做php -f image.php > array.php,在其他地方您可以做得到$array = include('array.php');一个可用的数组。但是我不知道它是否有效,因此,我给您添加它作为替代。甚至一个<?=json_encode(array_fill(0,952576,0));
伊斯梅尔·米格尔

顺便说一下,true可以替换为1,以节省3个字节。阅读文档imagepng(),您可以做header('Content-type: image/png');imagepng($i);。我相信您也可以替换为$b=imagecolorallocatealpha($i,0,0,0,127);imagefill($i,0,0,$b);imagefill($i,0,0,imagecolorallocatealpha($i,0,0,0,127));但不要在此引用我的名字。
Ismael Miguel

我刚刚测试并<? imagecolorallocatealpha($i=imagecreate(448,448),0,0,0,127);header('Content-type: image/png');imagepng($i);生成了透明图像(109字节)。自动将图像发送到浏览器/标准输出以及所有内容。
Ismael Miguel

4

Python 3.7-已导入PIL,30字节

Image.new("LA",[448]*2).show()

这需要导入,但是具有创建和显示实际图像文件而不是抽象的空数组的好处。

说明:

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()将在默认图像程序中打开图像。就我而言,这会在Windows Photo Viewer中打开一个临时位图文件,但结果可能会有所不同。可以说这是欺骗,因为位图表示不包含透明度

变化...

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

1
如果不计入导入次数,则应将语言声明为Python 3.7-PIL导入或类似形式。此外,在您的解释中请大写Import
乔纳森·弗雷希

谢谢,改正。我应该以24个字节(30或37个字节)给出答案吗?
P. Hopkinson,

字节数取决于您使用的语言。截至目前,您的提交使用Python 3语言(导入了PIL)需要30个字节。如果您使用Python 3编写代码,则可能会更长。当然,如果您使用Python 3语言并导入了整个PIL名称空间,则答案将是new("LA",[448]*2).show()26个字节。
乔纳森·弗雷希

非常感谢您提交我可以实际运行的代码,并产生了可以测试的输出!
阿努什

4

MATLAB,31个字节

imwrite(nan(448),'.png','tr',1)

创建一个448 x 448的NaN值矩阵,然后用于imwrite将它们保存到名为PNG的文件中'.png',并将透明度设置为1,使其透明。该'Transparency'参数的名字能够被缩写成'tr'为MATLAB允许参数名称的部分字符串匹配,只要缩短版本可用参数中是唯一的。


等待,为什么是443?
–仅使用ASCII

@仅ASCII的胖手指:)
Suever

O_o那是个疯狂的快速回复
ASCII码,仅ASCII,

4

dzaima / APL + APLP518 16个字节

{P5.img⍴∘0,⍨448}

输出可绘制到屏幕上(无效果)或转换回像素值的图像对象的功能。

-2感谢ngn


这会工作吗?{P5.img⍴∘0,⍨448}
ngn

@ngn确实会的,谢谢!
dzaima



3

MathGolf,10个字节

º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

与“标准”相比,此方法节省了1个字节 ♦7*_4º*a*a*



3

SmileBASIC,27个字节

DIM A[448,448]SAVE"DAT:I",A

将填充为0的二维448x448数组保存到名为的文件中 DAT:I(这比定义以某种方式返回数组的函数要短)

SmileBASIC中颜色的标准格式(所有图形功能都使用)是32位ARGB和16位5551 RGBA,并且0两种格式都是透明的。


是什么使它透明而不是黑色?

1
颜色为4字节ARGB格式(通常在Smilebasic中使用),因此0x00000000Alpha = 0,Red = 0,Green = 0,Blue =0。黑色为0xFF000000
12Me21

感谢SmileBasic使用RAW图像格式大声笑
明亮的

我会在技术上抱怨这不是图像格式,因为它不是,GRP但是我会放手,因为存储的实际数据是相同的。
snail_

@snail_它只是输出像素矩阵,而不使用特定的图像格式。
19Me21年

3

适用于iOS的ScPL快捷方式,98字节

Text"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
Base64Encode Decode
ResizeImage 448

屏幕截图

快捷方式iCloud链接

采用编码为base64的1x1透明gif并调整其大小


那是...很奇怪...我刚刚去的icloud链接是什么??
唐明亮

@donbright当您从快捷方式应用程序共享快捷方式时,它将建立该链接
pfg

2

Jstx,24 个字节

♪☺ü@/øP♦£Q)%)£Q◄úæD)%)£Q

说明

♪☺ü@ # 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.

在线尝试!




2

C ++,SFML,131字节

#include <SFML/Graphics.hpp>
void f(){sf::Image i;i.create(448,448);i.createMaskFromColor(sf::Color::Black);i.saveToFile("a.png");}

2

JavaScript + HTML,56个字节

location=C.toDataURL()
<canvas id=C width=448 height=448>

点击“运行代码段”将在IFRAME中生成448x448透明PNG。然后,您可以右键单击“将图像另存为...”以将其下载到计算机。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.