Είναι μια βιβλιοθήκη Python για τη δημιουργία .ico αρχεία εκεί;

ψήφοι
13

Ψάχνω να δημιουργήσετε favicon.icoαρχεία κάποιου προγράμματος από την Python, αλλά PIL έχει μόνο υποστήριξη για ανάγνωση icoαρχείων.

Δημοσιεύθηκε 05/09/2008 στις 11:26
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
7

Ίσως θα μπορούσε να λειτουργήσει ως εξής:

  • Δημιουργήστε την εικόνα εικονίδιο σας χρησιμοποιώντας PIL
  • Μετατρέψτε την εικόνα σε .ico μορφή χρησιμοποιώντας το περιβάλλον python για ImageMagick, PythonMagick

Δεν έχω δοκιμάσει αυτήν την προσέγγιση. Το ImageMagick μετατρέψει πρόγραμμα γραμμής εντολών ήταν σε θέση να μετατρέψει ένα .png αρχείο σε .ico μορφή, έτσι ώστε τουλάχιστον ImageMagick υποστηρίζει τη μορφή .ico.

Απαντήθηκε 05/09/2008 στις 11:36
πηγή χρήστη

ψήφοι
3

Δεν ξέρω αν αυτό ισχύει για όλες τις περιπτώσεις, αλλά σε WinXP μια .ico μπορεί να είναι ένα bmp του μεγέθους 16x16, 32x32 ή 64x64. Απλά αλλάξτε την επέκταση σε ICO από BMP και είστε έτοιμοι να πάτε.

Απαντήθηκε 05/09/2008 στις 11:38
πηγή χρήστη

ψήφοι
7

Σύμφωνα με τη Wikipedia σύγχρονα προγράμματα περιήγησης μπορεί να χειριστεί τα favicons σε μορφή PNG, οπότε ίσως θα μπορούσατε απλά να δημιουργήσει αυτό;

Εναλλακτικά το άρθρο ICO περιγράφει τη μορφή ...

Απαντήθηκε 05/09/2008 στις 14:35
πηγή χρήστη

ψήφοι
9

Μπορείτε να χρησιμοποιήσετε το μαξιλάρι :

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

Προαιρετικά, μπορείτε να καθορίσετε τα μεγέθη εικονίδιο που θέλετε:

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

Τα έγγραφα Μαξιλάρι λένε ότι από προεπιλογή θα δημιουργήσουν τα μεγέθη [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (255, 255)]και σε οποιοδήποτε μέγεθος μεγαλύτερο από το αρχικό μέγεθος ή το 255 θα πρέπει να αγνοηθεί.

Ναι, αυτό είναι το μόνο για ανάγνωση τμήμα των docs, αλλά λειτουργεί σε κάποιο βαθμό.

Απαντήθηκε 23/03/2016 στις 01:49
πηγή χρήστη

ψήφοι
0

Αν έχετε imageio , (ίσως την καλύτερη βιβλιοθήκη για την ανάγνωση / εγγραφή εικόνων σε Python), μπορείτε να το χρησιμοποιήσετε:

import imageio

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

Εγκαταστήστε είναι τόσο εύκολη όσο

pip install imageio
Απαντήθηκε 14/09/2018 στις 14:25
πηγή χρήστη

ψήφοι
0

Αν και αυτή η ερώτηση είναι αρκετά παλιά, είναι μια εξέχουσα αποτέλεσμα αναζήτησης για τη χρήση Python για να μετατρέψετε αρχεία PNG σε ICO, έτσι σκέφτηκα ότι θα προσθέσω δύο σεντ μου.

Αν το μόνο που θέλετε είναι ένα favicon, απάντηση Ντάγκλας Leeder φαίνεται απολύτως εντάξει για μένα. Εάν έχετε ένα PNG αρχείο υψηλής ανάλυσης του λογότυπου σας και θέλετε να το μετατρέψετε σε ένα αρχείο ICO, η απάντηση του Ronan Paixão είναι ίσως ο ευκολότερος τρόπος να πάει.

Αλλά ένα αρχείο ICO μπορεί να περιέχει πολλές εικόνες, που προορίζονται για διαφορετικές αναλύσεις, και βρήκα τον εαυτό μου συχνά με την κατάσταση που θέλουν να έχουν λεπτόκοκκο έλεγχο σε αυτά διαφορετικές αναλύσεις, για να αποφευχθεί η ατυχής αντι-aliasing επιπτώσεις, πράγμα που σημαίνει ότι θέλω να παράσχει κάθε ανάλυση εικόνας ξεχωριστά. Πράγμα που σημαίνει ότι θέλω να μετατρέψετε ούτε ένα, αλλά πολλά αρχεία PNG σε ένα ενιαίο αρχείο ICO. Σε ό, τι μπορώ να δω, το πακέτο μαξιλάρι δεν παρέχει αυτή τη δυνατότητα. Ευτυχώς, ένα σύγχρονο αρχείο ICO μπορεί να περιέχει πολλαπλά αρχεία PNG μέσα, έτσι ώστε το έργο συνοψίζεται στην απλή πρόκληση της γραφής μερικές συμμετοχές μπάλα. Ανάλογα με την κατάσταση, έγραψα δύο λειτουργίες, την πρώτη ουσιαστικά τη λύση του Ronan Paixão, ενώ το δεύτερο παρέχει τη λειτουργικότητα να ενταχθούν διάφορα αρχεία PNG σε ένα αρχείο ICO:

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)

Οι προϋποθέτει κώδικα ότι τα αρχεία PNG σας είναι 32-Bit ανά Pixel εικόνες RGBA. Σε αντίθετη περίπτωση, ο αριθμός 32 στον παραπάνω κώδικα θα πρέπει να αλλάξει και θα πρέπει να αντικατασταθεί με κάποια Μαξιλάρι-image-sniffing.

Απαντήθηκε 08/11/2019 στις 19:47
πηγή χρήστη

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