PDA

Vollständige Version anzeigen : Bild beim Ausdruck auf mehrere Blätter aufteilen.


flashnfantasy
20.05.2004, 16:58
Einen schönen Script kann ich hier noch einbringen.
Mein Ziel war es, große Bilder mit einem Drucker zu erzeugen, der nur auf A4 ausdrucken kann.
Das einfache 'Zerschneiden' der Bilder in GIMP wäre nicht die Lösung gewesen, da man zum Zusammenkleben immer ein wenig Rand braucht.
Der folgende Script zerlegt das Bild in mehrere Einzelbilder, die dann zusammengefügt werden können.


Der Script funktioniert folgendermassen:
Man gibt immer ein

Größe des Druckerpapiers.
Größe des Randes, der mindestens eingehalten weden soll.


Danach hat man mehrere Optionen.

Standart ist, daß man direkt nun ausdrucken kann. Es kommt das Bild dann in der Größe raus, die man eingestellt hat. Ist wichtig, wenn das Bild eine feste Größe haben soll.
Man kann auch die Anzahl der Blätter angeben, die horizontal verwendet werden sollen. Der Script erzeugt mehrer Bilder, die den Ausdruck optimal nutzen. Vorsicht ! das ursprüngliche Image wird verändert (skaliert).
Eigentlich wie Standart, nur das man vorher auf eine Zielgröße skalieren kann. Vorsicht ! beim Skalieren wird das ursprüngliche Image verändert.


Noch ein wichtiger Hinweis:
Das Abspeichern des Ergebnisses benutzt einen festen Pfad, also den bitte erzeugen oder anpassen.

http://gimpforum.de/album_pic.php?pic_id=71



(define lastimagewidth
(if (< 0 (car (gimp-image-list)))
(gimp-image-width (aref (cadr (gimp-image-list)) 0))
(cons 2048)
)
)

(script-fu-register "script-fu-postersplit"
_"<Image>/Script-Fu/Poster..."
"For Printing an Image on several sheets and stitch them together. Border gives you a Minumum of overlapping space. Mode 0: If you put the Sheets together, you get the original size. This will be most common. Mode 1: Puts as much Image as possible on the Number of Sheets given. Attention! calculates only the horizontal size. Mode 2: Like Mode 0, but the Image will be scaled to FinalWidth bevor printing."
"Mathias Weitz"
"Mathias Weitz"
"12/01/04"
""
SF-IMAGE "image" 0
SF-DRAWABLE "drawable" 0
SF-ADJUSTMENT _"SheetWidth" '(4489 400 20000 1 1 0 1)
SF-ADJUSTMENT _"SheetHeight" '(3308 400 20000 1 1 0 1)
SF-ADJUSTMENT _"Border" '(100 100 500 1 1 0 1)

SF-OPTION _"Mode" '(_"Use Image Width"
_"Use Fill-Sheets"
_"Use FinalWidth")
SF-ADJUSTMENT _"Fill-Sheets" '(2 2 20 1 1 0 1)
SF-ADJUSTMENT _"FinalWidth" (cons (car lastimagewidth) '(100 50000 1 1 0 1))
SF-STRING _"Name" "copy"
SF-TOGGLE _"Save" FALSE
)

(define (script-fu-postersplit image
drawable
blattbreite
blatthohe
uberlappung
mode
sheets
breite
nameC
save)
(gimp-image-undo-disable image)

; scaling
(set! theWidth (car (gimp-image-width image)))
(set! theHeight (car (gimp-image-height image)))
(set! uberlappungw uberlappung)
(if (= mode 0) (begin
(set! breite theWidth)
(set! mode 2)
))
(if (= mode 2) (begin
; Die Breite wird vorgegeben
; zuerst wird ermittel, wieviel Blätter mindestens bedruckt werden müssen
; damit wird er überlappende Bereich festgelegt
(set! np (/ (- breite uberlappung) (- blattbreite uberlappung)))
(set! sheets 0)
(while (< sheets np) (set! sheets (+ sheets 1)))
(set! uberlappungw (/ (- (* sheets blattbreite) breite) (- sheets 1)))
))
; newSizeX = sheets * (blattbreite - uberlappungw) + uberlappung
(set! newSizeX (+ (* sheets (- blattbreite uberlappungw)) uberlappungw))
(set! newSizeY (* (/ theHeight theWidth) newSizeX))
(gimp-image-scale image newSizeX newSizeY)

(set! theWidth (car (gimp-image-width image)))
(set! theHeight (car (gimp-image-height image)))
(set! pagesX (/ (- theWidth uberlappungw) (- blattbreite uberlappungw)))
(set! pagesY (/ (- theHeight uberlappung) (- blatthohe uberlappung)))
; Uberlappung hohe
(set! pagesYP 0)
(while (< pagesYP pagesY) (set! pagesYP (+ pagesYP 1)))
(set! uberlappungh (/ (- (* pagesYP blatthohe) theHeight) (- pagesYP 1)))

(set! iy 0)
(while (< iy pagesY)
(set! ix 0)
(while (< ix pagesX)

; Ein neues Image schaffen
(set! image-work (car (gimp-image-new blattbreite blatthohe RGB)))
(set! image-new-layer (car (gimp-layer-new image-work blattbreite blatthohe RGB "Hintergrund" 100 NORMAL)))
(gimp-drawable-fill image-new-layer 2)
(gimp-image-add-layer image-work image-new-layer 0)
(set! display-work (car (gimp-display-new image-work)))

; Kopieren
(gimp-rect-select image (* ix (- blattbreite uberlappungw)) (* iy (- blatthohe uberlappungh)) blattbreite blatthohe 2 0 0)
(gimp-edit-copy drawable)
(set! floating_sel (car (gimp-edit-paste image-new-layer 0)))
(gimp-floating-sel-anchor floating_sel)
(set! work (car (gimp-image-flatten image-work)))
(gimp-image-clean-all image-work)

(set! name nameC)
(set! name (string-append name "-"))
(set! name (string-append name (number->string iy)))
(set! name (string-append name "-"))
(set! name (string-append name (number->string ix)))
(set! name (string-append name ".tif"))
(gimp-image-set-filename image-work name)
(if (= save TRUE)
(begin
(file-tiff-save 1 image-work work (string-append "c:/Eigene Dateien/" name) "" 0)
(gimp-display-delete display-work)
(gimp-displays-flush)))

(set! ix (+ ix 1))
)
(set! iy (+ iy 1))
)
(gimp-image-undo-enable image)
(gimp-displays-flush)
)