21 Stimmen

Beschneiden eines PNG-Bildes auf seine Mindestgröße

Wie schneidet man den leeren Randbereich eines PNG-Bildes ab und verkleinert es mit Python auf seine Mindestgröße?

0voto

Frank Krueger Punkte 67044

Sie können verwenden PIL um Zeilen und Spalten Ihres Bildes zu finden, die ausschließlich aus Ihrer Rahmenfarbe bestehen.

Anhand dieser Informationen können Sie die Ausmaße des eingefügten Bildes leicht bestimmen.

Mit PIL können Sie das Bild dann erneut zuschneiden, um den Rand zu entfernen.

0voto

Ilya Bossov Punkte 1

Die anderen Antworten haben für mich beim Schreiben eines Blender-Skripts nicht funktioniert (ich kann PIL nicht verwenden), also vielleicht findet jemand anderes dies nützlich.

import numpy as np

def crop(crop_file):
    """crop the image, removing invisible borders"""
    image = bpy.data.images.load(crop_file, check_existing=False)
    w, h = image.size

    print("Original size: " + str(w) + " x " + str(h))

    linear_pixels = image.pixels[:]
    pixels4d = np.reshape(linear_pixels, (h, w, 4))

    mask = pixels4d [:,:,3] != 0.
    coords = np.argwhere(mask)
    y0, x0 = coords.min(axis=0)
    y1, x1 = coords.max(axis=0) + 1
    cropped_box = pixels4d[y0:y1, x0:x1, :]

    w1, h1 = x1 - x0, y1 - y0
    print("Crop size: " + str(w1) + " x " + str(h1))

    temp_image = bpy.data.images.new(crop_file, alpha=True, width=w1, height=h1)
    temp_image.pixels[:] = cropped_box.ravel()
    temp_image.filepath_raw = crop_file
    temp_image.file_format = 'PNG'
    temp_image.alpha_mode = 'STRAIGHT'
    temp_image.save()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X