Automatisches Verkleinern mit Seitenverhältnis

Gibt es eine einfache Möglichkeit, ein quadratisches Bild in GIMP automatisch zuzuschneiden / automatisch zu verkleinern, ohne jedoch das Seitenverhältnis zu ändern? Grundsätzlich würde das automatische Schrumpfen aufhören, sobald es nicht mehr möglich ist, die Gleichheit von Höhe und Breite beizubehalten.

Ich habe dies mit imagemagick und Powershell verwendet:

convert $files[$i].Name -set option:size '%[fx:max(w,h)]x%[fx:max(w,h)]' 
\ xc:none +swap -gravity center -composite $outfile

Am liebsten würde ich das mit scheme/script-fu machen.

Für die Aufzeichnungen inspirierte mich dies zur Datei bugzilla.gnome.org/show_bug.cgi?id=768640

Antworten (2)

  • Ebene duplizieren
  • Autocrop-Kopie
  • Ermitteln Sie die Größe und die Versätze eines potenziellen quadratischen Zuschnitts der Ebene anhand der beschnittenen Breite, Höhe und Versätze.
  • Kopie entfernen
  • Beschneiden Sie die ursprüngliche Ebene mit gimp-layer-resize

Etwas wie das:

# -*- coding: utf-8 -*-
#!/usr/bin/env python

import os, sys
from gimpfu import *

def squareCrop(image,layer):
    pdb.gimp_image_undo_group_start(image)

    try:
        x0,y0=layer.offsets

        # get size and offsets of fully autocropped layer
        copy=layer.copy()
        image.add_layer(copy)
        pdb.plug_in_autocrop_layer(image,layer)
        xC,yC=copy.offsets
        hC,wC=copy.height,copy.width
        image.remove_layer(copy)

        # determine padding direction
        topBottomPad=wC > hC
        pad=abs(hC-wC)/2

        # determine size and offsets for resize
        xOff,yOff=(x0-xC,y0+pad-yC) if topBottomPad else (x0+pad-xC,y0-yC)
        w,h=(wC,wC) if topBottomPad else (hC,hC)

        layer.resize(w,h,xOff,yOff)

    except Exception as e:
        print e.args[0]
        pdb.gimp_message(e.args[0])

    pdb.gimp_image_undo_group_end(image)

### Registrations
whoiam='\n'+os.path.abspath(sys.argv[0])

register(
    'square-crop',
    'Square crop'+whoiam,
    'Square crop',
    'Ofnuts','Ofnuts','2016',
    'Square crop...',
    "RGB*",
    [
        (PF_IMAGE, "image", "Input image", None),
        (PF_DRAWABLE, "drawable", "Input drawable", None),
    ],
    [],
    squareCrop,
    menu="<Image>/Layer/Transform",
)

main()

Beachten Sie, dass Sie auf diese Weise nicht zuschneiden können, wenn Sie sich zu nahe an einem Rand befinden, da die Polsterung über die Leinwandgrenzen hinausgehen würde (etwas, das durch den obigen Code nicht überprüft wird).

Vielleicht ist das dumm, aber ich bin mir nicht sicher, wie ich das zum Laufen bringen soll. Ich habe versucht, es in dasselbe Verzeichnis zu legen, in dem sich meine Schemaskripte befinden, aber es wird nicht angezeigt
Dies ist Python, also ist es technisch gesehen ein Plug-In, kein Skript, und sollte sich daher im plug-insVerzeichnis anstelle des Verzeichnisses befinden scripts(und sollte unter Linux und OSX das Ausführbar- Flag haben).
Ich habe es tatsächlich dort versucht, kein Glück. Ich habe jedoch ein anderes Python-Skript in diesem Ordner, das angezeigt wird.
Beim Kopieren/Einfügen wurden wahrscheinlich einige Leerzeichen verloren/hinzugefügt, und Python reagiert sehr empfindlich darauf ... Holen Sie sich die Datei von dort und versuchen Sie es erneut.
immer noch kein Glück. Gibt es ein Python-Äquivalent der Skript-Fu-Konsole? Vielleicht können Sie von dort aus einfacher debuggen. Andernfalls werde ich versuchen, es in ein Schema zurückzuentwickeln
@Matthew Morrone Filters>Python-fu>Console , aber damit können Sie Dinge ausprobieren, nicht vorhandene Skripte debuggen. Es gibt keinen Grund, warum das Skript in Ihrer Installation nicht funktioniert, vorausgesetzt, 1) sein MD5-Hash ist cc96a13b33a9b5084e212d2a2f2a3fb9, es hat das ausführbare Bit gesetzt, wenn Sie Linux oder OSX verwenden, und es befindet sich im plug-insVerzeichnis Ihres Gimp-Profils (wie aufgeführt unter Bearbeiten>Einstellungen>Ordner>Plug-Ins ). Sie können Gimp mit einem --verboseParameter starten (OSX/Linux: Terminal, in Windows: Verknüpfung bearbeiten) und Sie erhalten beim Start jede Menge Startmeldungen ...
PS: Überprüfen Sie auch, ob das Plugin registriert ist: Suchen Sie nach python-fu-square-cropin der pluginrcDatei in Ihrem Gimp-Profilverzeichnis.
Was ich meinte, war, dass ich jede Zeile in der Konsole durcharbeiten würde. Es scheint jedoch, dass ich überhaupt kein Python-Fu habe, also werde ich daran arbeiten, das herauszufinden, und dann alles oben erneut versuchen. Danke schön!
Python-fu ist seit Gimp 2.8 eingebaut. Läuft noch 2.6?
Nein, 2,8 auf jeden Fall. hier ein Screenshot: ! kein Pythonfu
Seltsam ... vielleicht haben Sie es bei der Installation deaktiviert ... (vorausgesetzt, dies ist möglich) oder der Python-Interpreter funktioniert aus irgendeinem Grund nicht? Wenn Sie unter Windows arbeiten, muss irgendwo in "C:\Program files\GIMP2" ein "python"-Verzeichnis vorhanden sein.

Hier ist meine Lösung:

(define (square image drawable)
    (gimp-image-undo-group-start image)
    (gimp-context-push)
    (plug-in-autocrop 1 image drawable)
    (let* (
        (width (car (gimp-image-width image)))
        (height (car (gimp-image-height image)))
        (newWidth width)
        (newHeight height)
        (layer (vector-ref (cadr (gimp-image-get-layers image)) 0))
    )

        (if (< width height)
            (set! newWidth height)
        )
        (if (> width height)
            (set! newHeight width)
        )

        (gimp-image-resize image newWidth newHeight (/ (- newWidth width) 2) (/ (- newHeight height) 2))
        (gimp-layer-resize-to-image-size layer)

        (gimp-image-clean-all image)
        (gimp-context-pop)
        (gimp-image-undo-group-end image)
        (gimp-displays-flush)

        (list newWidth newHeight)
    )
)
(script-fu-register
    "square"
    "<Image>/Tools/Square"
    ""
    "Matthew Morrone"
    "Uncopyright 2016 Matthew Morrone"
    "27 September 2016"
    "*"
    SF-IMAGE "Input Image" 0
    SF-DRAWABLE "Input Drawable" 0
)
Nun, ist das eine Antwort oder ist das eine neue Frage oder sollte es besser eine Bearbeitung der ursprünglichen Frage sein? Bitte beachten Sie, dass der Platz für Antworten nur für echte Antworten verwendet werden sollte ...
Nein, dies ist eine Antwort, ich wollte nur darauf hinweisen, dass es möglicherweise einen besseren Weg gibt, dies zu tun.
Sie könnten beschreiben, was es tut - oder tun soll. Ohne den Code zu genau zu betrachten, scheint es eine automatische Zuschneidung durchzuführen und dann die Größe des Bildes und der (oder einer) Ebene auf das kleinste Quadrat zu ändern, das den zugeschnittenen Bereich enthält.