如何将.ICO转换为.PNG?

时间:2008-09-01 08:01:29

标签: graphics

我可以使用什么工具将.ICO文件转换为.PNG文件?

23 个答案:

答案 0 :(得分:82)

Google有一个ico to png转换器,我前几天在reddit看到了它。

http://www.google.com/s2/favicons?domain=stackoverflow.com

答案 1 :(得分:41)

ImageMagick几乎可以将任何广泛使用的图像格式转换为另一种图像格式。

http://www.imagemagick.org/script/index.php

特别参见http://www.imagemagick.org/script/convert.php

大多数流行语言都有ImageMagick bindigs。

答案 2 :(得分:40)

我在C#中这样做了很好地完成了工作

#region Usings

using System;
using System.IO;
using System.Linq;
// Next namespace requires a reference to PresentationCore
using System.Windows.Media.Imaging;

#endregion

namespace Imagetool
{
internal class Program
{
    private static void Main(string[] args)
    {
        new Ico2Png().Run(@"C:\Icons\",
                          @"C:\Icons\out\");
    }
}

public class Ico2Png
{
    public void Run(string inPath, string outPath)
    {
        if (!Directory.Exists(inPath))
        {
            throw new Exception("In Path does not exist");
        }

        if (!Directory.Exists(outPath))
        {
            Directory.CreateDirectory(outPath);
        }


        var files = Directory.GetFiles(inPath, "*.ico");
        foreach (var filepath in files.Take(10))
        {
            Stream iconStream = new FileStream(filepath, FileMode.Open);
            var decoder = new IconBitmapDecoder(
                iconStream,
                BitmapCreateOptions.PreservePixelFormat,
                BitmapCacheOption.None);

            var fileName = Path.GetFileName(filepath);

            // loop through images inside the file
            foreach (var frame in decoder.Frames)
            {
                // save file as PNG
                BitmapEncoder encoder = new PngBitmapEncoder();
                encoder.Frames.Add(frame);
                var size = frame.PixelHeight;

                // haven't tested the next lines - include them for bitdepth
                // See RenniePet's answer for details
                // var depth = frame.Thumbnail.Format.BitsPerPixel;
                // var path = outPath + fileName + size + depth +".png";

                var path = outPath + fileName + size + ".png";
                using (Stream saveStream = new FileStream(path, FileMode.Create))
                {
                    encoder.Save(saveStream);
                }
            }
        }
    }
}
}

答案 3 :(得分:30)

  

注意:当问到这个问题时这是免费的,但显然它是一个   现在付费应用。 @Sean Kearon现在应该改变“正确答案”。

您可以使用IcoFX($ 59)

  

这是图标的一体化解决方案   创作,提取和编辑。它   旨在与Windows XP一起使用,   Windows Vista和Macintosh图标   支持透明度。

答案 4 :(得分:20)

免费:@icon sushi非常适合处理图标:

功能

  • icon sushi可以将图像文件转换为图标文件,反之亦然。
  • 支持Windows Vista大图标。 (使用PNG压缩转换大图像)
  • 支持Windows XP 32位图标。
  • 支持包含文件中某些图标的多个图标。
  • 编辑Alpha通道和透明度掩码。
  • 打开1x1到256x256尺寸的图像。
  • 打开1/4/8/24/32位彩色图像。
  • 开放时间:ICO / BMP / PNG / PSD / EXE / DLL / ICL,转换为:ICO / BMP / PNG / ICL
  • 从剪贴板复制到/粘贴。

答案 5 :(得分:15)

ConvertICO.com对我来说一直很好。

答案 6 :(得分:10)

我不知道没有IrFanView我会在哪里。非常适合批量转换图像,包括ico到png。

答案 7 :(得分:9)

在Mac上的终端:

convert favicon.ico favicon.png

答案 8 :(得分:7)

如果有人想在内存中使用Python Imaging Library (PIL)转换文件或网址

from cStringIO import StringIO
import Image
import urllib

def to_png(path, mime="png"):
    if path.startswith("http:"):
        url = urllib.quote(url)
        input = StringIO()
        input.write(urllib.urlopen(url).read())
        input.seek(0)
    else:
        input = open(path).read()

    if input:
        out  = StringIO()
        image = Image.open(input)
        image.save(out, mime.upper())
        return out.getvalue()
    else:
        return None

答案 9 :(得分:7)

一个快速选项是下载Paint.net并安装Icon/Cursor plugin。然后,您可以使用Paint.net打开.ico文件,编辑它们,并将它们保存为.png或其他格式。

对于批量处理,我接下来是ImageMagick或IrFanView的建议。

答案 10 :(得分:6)

这里有一些C#代码,非常基于“Peter”对这个帖子的回答。 (如果您觉得这个答案有用,请向Peter投票。)

  /// <summary>
  /// Method to extract all of the images in an ICO file as a set of PNG files. The extracted 
  /// images are written to the same disk folder as the input file, with extended filenames 
  /// indicating the size of the image (16x16, 32x32, etc.) and the bit depth of the original 
  /// image (typically 32, but may be 8 or 4 for some images in old ICO files, or even in new 
  /// ICO files that are intended to be usable in very old Windows systems). But note that the 
  /// PNG files themselves always have bit depth 32 - the bit depth indication only refers to 
  /// the source image that the PNG was created from. Note also that there seems to be a bug 
  /// that makes images larger than 48 x 48 and with color depth less than 32 non-functional.
  /// 
  /// This code is very much based on the answer by "Peter" on this thread: 
  /// http://stackoverflow.com/questions/37590/how-to-convert-ico-to-png
  /// 
  /// Plus information about how to get the color depth of the "frames" in the icon found here:
  /// http://social.msdn.microsoft.com/Forums/en-US/e46a9ad8-d65e-4aad-92c0-04d57d415065/a-bug-that-renders-iconbitmapdecoder-useless
  /// </summary>
  /// <param name="iconFileName">full path and filename of the ICO file</param>
  private static void ExtractImagesFromIconFile(string iconFileName)
  {
     try
     {
        using (Stream iconStream = new FileStream(iconFileName, FileMode.Open))
        {
           IconBitmapDecoder bitmapDecoder = new IconBitmapDecoder(iconStream, 
                               BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.None);

           foreach (BitmapFrame bitmapFrame in bitmapDecoder.Frames)
           {
              int iconSize = bitmapFrame.PixelHeight;
              int bitDepth = bitmapFrame.Thumbnail.Format.BitsPerPixel;
              string pngFileName = Path.GetDirectoryName(iconFileName) + 
                                   Path.DirectorySeparatorChar +
                                   Path.GetFileNameWithoutExtension(iconFileName) + "-" +
                                   iconSize + "x" + iconSize + "-" + bitDepth + ".png";
              using (Stream saveStream = new FileStream(pngFileName, FileMode.Create))
              {
                 BitmapEncoder bitmapEncoder = new PngBitmapEncoder();
                 bitmapEncoder.Frames.Add(bitmapFrame);
                 bitmapEncoder.Save(saveStream);
              }
           }
        }
     }
     catch (Exception ex)
     {
        MessageBox.Show("Unable to extract PNGs from ICO file: " + ex.Message,
                       "ExtractImagesFromIconFile", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
  }

答案 11 :(得分:6)

查看http://iconverticons.com/ - iConvert允许您轻松地将Windows ico转换为Mac OS X icns,SVG转换为Windows图标,将PNG ico转换为Mac OS X ico,将JPG图像转换为Windows图标等等。

答案 12 :(得分:6)

http://converticon.com/也是候选人。

答案 13 :(得分:4)

XnView是适用于Windows / Mac / Linux(免费)(download page)的出色图形工具,可让您浏览图像,批量转换,转换,调整大小,旋转,截取屏幕等。< / p>

它可以进行XYZICO转换,其中XYZ几乎是阳光下的任何格式。

alt text http://img443.imageshack.us/img443/672/convert.gif

答案 14 :(得分:3)

http://www.gimp.org/

免费且强大的方法使大型分辨率.ico文件1024x1024或更高版本至少与win7一起使用,我测试过:)

只需保存并输入.ico

:)

透明度很容易,加载新图像并选择高级选项,背景颜色 - >透明度

答案 15 :(得分:2)

Windows 7附带的Paint版本会将图标转换为PNG,JPEG,等等......现在。

答案 16 :(得分:1)

http://convertico.org/允许用户一步将多个ico文件转换为PNG,GIF或JPG文件。

答案 17 :(得分:1)

我刚遇到这个问题。仅供参考我在油漆区打开.ico并保存为.png。为我工作!

答案 18 :(得分:0)

Icon Convert是另一个带调整大小选项的在线工具。

答案 19 :(得分:0)

http://www.html-kit.com/favicon/有一个在线转换工具。除了生成.ico之外,它还会为您提供动画.gif版本。

答案 20 :(得分:0)

另一种选择是IrfanView

答案 21 :(得分:0)

如果您没有寻找程序化的东西,那么只需“打印屏幕”并裁剪。

答案 22 :(得分:0)

这可能是一个相当愚蠢的答案,但如果你只需要一个图标,你可以只截取文件夹中的图标截图并砍掉你想要的部分。确保图标显示您想要的尺寸,当然还有白色背景。

如果你使用的是像SnagIt或WinSnap这样不错的屏幕截图应用程序,区域快照应该会在几秒钟内完成。

请注意,这不会为您提供透明度。