dosyaları .ico üretmek için bir Python kütüphane var?

oy
13

Ben oluşturmak için arıyorum favicon.icoPython programlama dosyaları, ancak PIL sadece okumak için desteği vardır icodosyaları.

Oluştur 05/09/2008 saat 11:26
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
7

Belki işe yarar aşağıdadır:

  • PIL kullanarak simge görüntüsünü oluşturmak
  • Imagemagick e piton arayüzünü kullanarak biçimini .ico görüntüyü dönüştürme PythonMagick

Ben bu yaklaşımı denemedim. ImageMagick yani en azından ImageMagick .ico biçimini destekleyen, komut satırı programı formatını .ico bir .png dosyasını dönüştürmek başardı dönüştürün.

Cevap 05/09/2008 saat 11:36
kaynak kullanıcı

oy
3

Ancak bunun her zaman geçerli olmadığını bilmiyorum, ama WinXP bir .ico boyutu 16x16, 32x32 veya 64x64'e bir bmp olabilir. Sadece bmp den ico uzantısı değiştirmek ve gitmeye hazırsınız.

Cevap 05/09/2008 saat 11:38
kaynak kullanıcı

oy
7

Göre Vikipedi PNG biçiminde faviconları işleyebilir modern tarayıcılarda, belki sadece o yaratabilir?

Alternatif ICO makale biçimini tarif eder ...

Cevap 05/09/2008 saat 14:35
kaynak kullanıcı

oy
9

Sen kullanabilirsiniz Yastık :

from PIL import Image
filename = r'logo.png'
img = Image.open(filename)
img.save('logo.ico')

İsteğe bağlı olarak, istediğiniz simge boyutlarını belirleyebilir:

icon_sizes = [(16,16), (32, 32), (48, 48), (64,64)]
img.save('logo.ico', sizes=icon_sizes)

Yastık dokümanlar varsayılan olarak boyutları üretecektir söylemek [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (255, 255)]ve orijinal boyutunda veya 255 dikkate alınmayacaktır daha büyük herhangi bir boyut.

Evet, içinde bulunduğu Salt Okunur dokümanlar bölümünde, ancak bir dereceye kadar çalışır.

Cevap 23/03/2016 saat 01:49
kaynak kullanıcı

oy
0

Eğer varsa ImageIO , (Python görüntüleri yazma okuma muhtemelen en iyi kütüphane /), bunu kullanabilirsiniz:

import imageio

img = imageio.imread('logo.png')
imageio.imwrite('logo.ico', img)

Yükleme kadar kolaydır

pip install imageio
Cevap 14/09/2018 saat 14:25
kaynak kullanıcı

oy
0

Bu soru oldukça eski olmasına rağmen, benim iki sent ekleyeceğiz düşündüm, ICO PNG dosyalarını dönüştürmek için Python kullanarak için görünen bir arama sonucu.

İstediğin site simgesi ise, Douglas Leeder cevabı bana rahat görünüyor. logonuza biri yüksek çözünürlüklü PNG dosyası varsa ve bir ICO dosyasına dönüştürmek istiyorsanız, Ronan Paixão cevabı gitmek en kolay yolu olasılıkla gerçek değildir.

Ama bir ICO dosyası farklı çözünürlükler için tasarlanan birden fazla görüntü içerebilir, ve sık sık, bu farklı çözünürlüklerde üzerinde ince taneli kontrol sahibi olmak Ben sağlamak istiyoruz demek olduğunu talihsiz bir anti-aliasing etkilerini önlemek için isteyen durumun içinde buldum tek tek her resim çözünürlüğü. Bu yüzden tek bir ICO dosya içine tek bir, ancak birden PNG dosyalarını dönüştürmek istediğiniz anlamına gelir. Bildiğim kadarıyla gördüğünüz gibi, Yastık paket bu yeteneği sağlamaz. Görev bazı başlık girişler yazmak basit meydan aşağı kaynar böylece Neyse ki, modern ICO dosyası, içine birden çok PNG dosyalarını içerebilir. İkincisi ise bir ICO dosya içine birkaç PNG dosyalarını katılmak için işlevsellik sağlarken Duruma bağlı olarak, ben, iki işlevi temelde ilkini Ronan Paixão çözümünü yazdı:

from pathlib import Path
from PIL import Image


def bake_one_big_png_to_ico(sourcefile, targetfile, sizes=None):
    """Converts one big PNG into one ICO file.

    args:
        sourcefile (str): Pathname of a PNG file.
        targetfile (str): Pathname of the resulting ICO file.
        sizes (list of int): Requested sizes of the resulting
            icon file, defaults to [16, 32, 48].

    Use this function if you have one big, square PNG file
    and don’t care about fine-tuning individual icon sizes.

    Example::

        sourcefile = "Path/to/high_resolution_logo_512x512.png"
        targetfile = "Path/to/logo.ico"
        sizes = [16, 24, 32, 48, 256]
        bake_one_big_png_to_ico(sourcefile, targetfile, sizes)
    """
    if sizes is None:
        sizes = [16, 32, 48]
    icon_sizes = [(x, x) for x in sizes]
    Image.open(sourcefile).save(targetfile, icon_sizes=icon_sizes)


def bake_several_pngs_to_ico(sourcefiles, targetfile):
    """Converts several PNG files into one ICO file.

    args:
        sourcefiles (list of str): A list of pathnames of PNG files.
        targetfile (str): Pathname of the resulting ICO file.

    Use this function if you want to have fine-grained control over
    the resulting icon file, providing each possible icon resolution
    individually.

    Example::

        sourcefiles = [
            "Path/to/logo_16x16.png",
            "Path/to/logo_32x32.png",
            "Path/to/logo_48x48.png"
        ]
        targetfile = "Path/to/logo.ico"
        bake_several_pngs_to_ico(sourcefiles, targetfile)
    """

    # Write the global header
    number_of_sources = len(sourcefiles)
    data = bytes((0, 0, 1, 0, number_of_sources, 0))
    offset = 6 + number_of_sources * 16

    # Write the header entries for each individual image
    for sourcefile in sourcefiles:
        img = Image.open(sourcefile)
        data += bytes((img.width, img.height, 0, 0, 1, 0, 32, 0, ))
        bytesize = Path(sourcefile).stat().st_size
        data += bytesize.to_bytes(4, byteorder="little")
        data += offset.to_bytes(4, byteorder="little")
        offset += bytesize

    # Write the individual image data
    for sourcefile in sourcefiles:
        data += Path(sourcefile).read_bytes()

    # Save the icon file
    Path(targetfile).write_bytes(data)

kod ön varsayar PNG dosyalarınızın 32-Bit başına Pixel RGBA görüntüleri olmaları. Aksi takdirde, yukarıdaki kodda 32 numaralı değiştirilmesi gerekir ve bazı Yastık görüntü koklama ile değiştirilmelidir.

Cevap 08/11/2019 saat 19:47
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more