如何将 Android XML Drawable 保存、导出或转换为 PNG 图像文件?

发布于 2024-12-21 04:01:16 字数 432 浏览 2 评论 0原文

我有一个我非常喜欢的渐变,但我使用 XML 可绘制对象创建了它:

<gradient
    android:startColor="#DD181C18"
    android:endColor="#809C7D5A"
    android:angle="90"/>

将其创建为 png 或类似内容的简单方法是什么?

我真正想要的是: 一个工具,可以使用该工具并使用 #aarrggbb 格式作为输入 alpha/颜色(90 度角,一般角度,将是一个优点)来制作渐变。

感谢您的任何帮助。

编辑:哦!我完全意识到 ImageMagick 应该能够做到这一点。我很快就会发布我的答案代码,除非有人想抢先一步并获得全部赏金!

I have a gradient I really like but I created it using XML drawable:

<gradient
    android:startColor="#DD181C18"
    android:endColor="#809C7D5A"
    android:angle="90"/>

What would be an easy way to create this to a png or something similar?

What I'm really looking for is:
a tool that can and instructions using that tool to make gradients using an #aarrggbb format as it's input alpha/color (90 degree angle, angles in general, would be a plus).

Thanks for any help.

EDIT: D'oh! I totally just realized ImageMagick should be able to do this. I will post the code that is my answer shortly, unless someone wants to beat me to it and receive the whole bounty!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

只有一腔孤勇 2024-12-28 04:01:16

最后,这是一个使用 ImageMagick 的单行!

我不敢相信我之前没想过使用 ImageMagick,呃!!!

convert -size 480x84 gradient:'rgba(156, 125, 90, 0.52)'-'rgba(24, 28, 24, 0.86)' tmp.png

作为参考,我使用它来使用我的 Android XML 可绘制 ##AARRGGBB 值创建 .png 图像文件。 ImageMagick FTW!!!

感谢大家的意见。

In the end it was a one liner using ImageMagick!

I can't believe I didn't think to use ImageMagick before, Duh!!!

convert -size 480x84 gradient:'rgba(156, 125, 90, 0.52)'-'rgba(24, 28, 24, 0.86)' tmp.png

For reference, I used this to create a .png image file using my Android XML drawable ##AARRGGBB values. ImageMagick FTW!!!

Thanks for everyone's input.

灵芸 2024-12-28 04:01:16

使用像 Photoshop 或 Paint.Net 这样的程序 - 它们都有渐变工具,并且可以让您以与那里相同的格式设置颜色。

Use a program like photoshop or paint.Net - they both have gradient tools and should let you set the colours in the same format as you have there.

[浮城] 2024-12-28 04:01:16

尝试一下:

try {
    item.setDrawingCacheEnabled(true);
    Bitmap bmp = item.getDrawingCache();
    FileOutputStream out = new FileOutputStream(filename);
    bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
} catch (Exception e) {
    e.printStackTrace();
}

这里的 item 是我想要渲染的视图/视图组。

我实际上使用相同的片段(减去文件写入)进行一些屏幕渲染,并且它似乎保留了透明度。

关于颜色的注意事项:

在 android 中可以使用十六进制值指定颜色。模式 ARGB 中的每个颜色值都有一个字节(8 位)可用(总共 32 位)。 A 代表 AlphaR 代表 RedG 代表 绿色B 代表蓝色。每个分量的值可以在 (0, 255) 之间。请注意:

decimal 0   = hex 0x00
decimal 255 = hex 0xFF

因此,如果您想要带有不透明“Alpha(无透明度)的白色”,您可以使用#FFFFFFFF。对于黑色#FF000000。对于灰色#FF80808080是十进制 128 的十六进制值,为您提供全强度白色的一半。所以80`给你中值灰色。

使用十六进制算术来获取十进制颜色的值。

AFAIK,径向渐变的角度应该没有任何区别。在 GIMP 中尝试所有这些或阅读 GIMP 教程。如果可以的话,最好还是使用 Photoshop(提供 90 天试用版)。

Give this a try:

try {
    item.setDrawingCacheEnabled(true);
    Bitmap bmp = item.getDrawingCache();
    FileOutputStream out = new FileOutputStream(filename);
    bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
} catch (Exception e) {
    e.printStackTrace();
}

Here item is the view/view group that I want to render.

I actually use the same fragment (minus the file write) for some on screen rendering and it seems preserve transparency.

Note About Colors:

Colors can be specified in android using hexadecimal values. A byte (8 bits) are available for each color value in the pattern ARGB (total 32 bits). A stands for Alpha, R stands for Red, G for Green and B for Blue. Each component can have values between (0, 255). Note that:

decimal 0   = hex 0x00
decimal 255 = hex 0xFF

So if you wanted a white color with opaque 'Alpha(no transparency) you would use#FFFFFFFF. For Black#FF000000. For Grey#FF808080.80is hex value of decimal 128 and gives you half of full intensity white. so80` gives you median Grey.

Use Hexadecimal arithmetic to get values of your decimal colors.

AFAIK, Angle for a radial gradient should not make any difference. Try all of this in GIMP or read GIMP tutorials. Better still use Photoshop if you can (90 days Trial versions available).

空宴 2024-12-28 04:01:16

您还可以创建一个仅将渐变作为背景的活动,屏幕上没有其他内容。

在模拟器或设备上运行应用程序,并使用 DDMS 进行屏幕捕获。然后,您将有一个渲染良好的 PNG 保存,并且您可以通过改变您正在使用的模拟器的屏幕尺寸来创建您想要的任何尺寸。

您的 XML 可能如下所示:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/your_gradient">
</LinearLayout>

You could also create an activity with just the gradient as a background, and nothing else on the screen.

Run the app on an emulator or device, and use DDMS to take a screen capture. You will then have a nicely rendered PNG to save, and you can create whatever size you wish, by varying the screen size of the emulator you are using.

Your XML could look like this:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/your_gradient">
</LinearLayout>
寄意 2024-12-28 04:01:16

将矢量图像转换为 PNG 可以轻松地通过两个步骤完成:

将 Android Drawable 转换为 SVG

这些文件格式非常相似,您可以轻松地将矢量手动转换为 SVG(请参阅 这个答案),但也有一些网站可以为您执行此操作。

将 SVG 渲染为 PNG

有很多网站都可以做到这一点。快速搜索应该会产生大量结果。

Converting a vector image to a PNG can easily be done in two steps:

Converting an Android Drawable to an SVG

These file formats are so similar, you can easily convert your vector to an SVG by hand (see this answer), but there are also websites who can do this for you.

Render the SVG as a PNG

There are many websites who can do this. A quick search should yield plenty of results.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文