Polskie Forum Użytkowników GIMP-a

Ogólne dyskusje => GIMP - pomoc => Wątek zaczęty przez: oinisco on 03.10.2024, 08:11:15



Tytuł: Hurtowe dodawanie tla (scalanie) do zdjęć
Wiadomość wysłana przez: oinisco on 03.10.2024, 08:11:15
Witam,

zazwyczaj korzystam z FastStone Photo Resizer do hurtowej obróbki zdjęć jednak jest jedna funkcja, której on nie ma.

Posiadam kilkaset zdjęć, niewielkich rozmiarów i chciałbym nałożyć je na większe tło. Np obrazek który ma 400x400px chciałbym nałożyć na inny, większy o wymiarach 500x500px tworząc jak gdyby swoją ramkę. Operację tę chciałbym wykonać hurtowo, a większy obrazek (ten służący jako tło/ramka) byłby zawsze identyczny. Czy GIMP pozwoli wykonać mi taką operację "w miarę" hurtowo na plikach .jpg?

Dziękuję.
Rafał


Tytuł: Odp: Hurtowe dodawanie tla (scalanie) do zdjęć
Wiadomość wysłana przez: be@ on 03.10.2024, 10:34:41
Będzie potrzebny plugin BIMP: https://www.gimpuj.info/index.php?topic=68664.0


Tytuł: Odp: Hurtowe dodawanie tla (scalanie) do zdjęć
Wiadomość wysłana przez: oinisco on 04.10.2024, 13:59:19
Zainstalowałem dodatek - dziękuję. Zapoznałem się z litą procedur, ale nie ma tam takich oczywistych jak np "paste".

Czy masz pomysł jak ustawić te procedury? Przypomnę, chciałbym na duży kwadratowy obrazek (zawsze ten sam, jako tło) dodać mniejszy. I tutaj już te mniejsze będą różnej wielkości. Wszystko wyśrodkowane w pionie i poziomie.


Tytuł: Odp: Hurtowe dodawanie tla (scalanie) do zdjęć
Wiadomość wysłana przez: be@ on 04.10.2024, 14:05:31
Tu już chyba trzeba zapytać użytkownika Zbyma72age (https://www.gimpuj.info/index.php?action=pm;sa=send;u=1017)


Tytuł: Odp: Hurtowe dodawanie tla (scalanie) do zdjęć
Wiadomość wysłana przez: Ziomioslaw on 04.10.2024, 18:17:42
Ja bym sugerował użycie skryptu:

Kod:
(define (batch-center-on-background background-file input-file output-file)
(let* (
    (input-image (car (gimp-file-load RUN-NONINTERACTIVE input-file input-file)))
    (background-image (car (gimp-file-load RUN-NONINTERACTIVE background-file background-file)))
    (input-layer (car (gimp-image-get-active-layer input-image)))
    (bg-width (car (gimp-image-width background-image)))
    (bg-height (car (gimp-image-height background-image)))
    (input-width (car (gimp-image-width input-image)))
    (input-height (car (gimp-image-height input-image)))
    (x-pos (/ (- bg-width input-width) 2))
    (y-pos (/ (- bg-height input-height) 2))
  )

  (gimp-edit-copy input-layer)
  (let* (
      (new-layer (car (gimp-layer-new background-image bg-width bg-height RGBA-IMAGE "Layer" 100 NORMAL-MODE)))
    )

    (gimp-image-add-layer background-image new-layer -1)
    (gimp-image-set-active-layer background-image new-layer)
    (gimp-edit-paste new-layer TRUE)
    (gimp-layer-set-offsets new-layer x-pos y-pos)
    (gimp-floating-sel-anchor (car (gimp-image-get-active-layer background-image)))
  )

  (gimp-image-flatten background-image)
  (gimp-file-save RUN-NONINTERACTIVE background-image (car (gimp-image-get-active-layer background-image)) output-file output-file)

  (gimp-image-delete input-image)
  (gimp-image-delete background-image)
))

(define (filename-from-path path)
  (car (reverse (strbreakup path "/")))
)

(define (basename-from-filename file-name)
  (car (strbreakup file-name "."))
)

(define (batch-center-on-background-batch background-file input-pattern result-directory)
(let* (
    (files (cadr (file-glob input-pattern 1)))
  )
  (while (not (null? files))
    (let* (
        (file-name (car files))
        (output-filename (string-append result-directory "/" (basename-from-filename (filename-from-path file-name)) ".jpg"))
      )
      (batch-center-on-background background-file file-name output-filename)
    )

    (set! files (cdr files))
  )
))

To umieść gdzieś w katalogu (na Windowsie):

Kod:
%USERPROFILE%\AppData\Roaming\GIMP\2.10\scripts

Potem można wywołać:

Kod:
gimp -i -b "(batch-center-on-background-batch \"tlo.jpg\" \"input/*.jpg\" \"output\" )" -b "(gimp-quit 0)"

Gdzie input to nazwa katalogu, gdzie znajdują się pliki (nie są zmieniane), output to pusty katalog. Plik tla, to oczywiście pierwszy, nazwany tutaj: tlo.jpg

I efektem było:

Kod:
├── input
│   ├── aaaaa.jpg
│   └── bbbbbbbb.jpg
├── output
│   ├── aaaaa.jpg
│   └── bbbbbbbb.jpg
└── tlo.jpg

Note: używałem AI, ale okazało się, że robi błędy.


Tytuł: Odp: Hurtowe dodawanie tla (scalanie) do zdjęć
Wiadomość wysłana przez: oinisco on 06.10.2024, 15:31:02
Utworzyłem ten plik zarówno w formacie SCM jak i TXT. Wrzuciłem oba do podanego przez Ciebie katalogu. Dodatkowo dodałem je do Program Files... scripts gdzie mam pozostałe skrypty GIMP. Rozumiem, że skrypt powinien być widoczny w Script-Fu, w menu? Nie ma go tam.

Pierwszy raz mam do czynienia ze skryptem GIMP, nie jestem też programistą więc wybacz pytania.

Zastanawiam się jeszcze, czy ścieżka

gimp -i -b "(batch-center-on-background-batch \"tlo.jpg\" \"input/*.jpg\" \"output\" )" -b "(gimp-quit 0)"

jest poprawna. 2x ma być batch?


Tytuł: Odp: Hurtowe dodawanie tla (scalanie) do zdjęć
Wiadomość wysłana przez: Ziomioslaw on 08.10.2024, 21:12:19
 [lp] Wystarczy tylko do katalogu użytkownika

 [lp] Nie będzie widoczny w GIMP-ie, bo brakuje rejestracji, on został przeznaczony do uruchamiania we wierszu poleceń

 [lp] "2x ma być batch?", tak to poprawne, bo koślawo napisałem tę nazwę, ona jest tutaj:

Kod:
(define (batch-center-on-background-batch background-file (...)

 [lp] Poprawiłem ten skrypt i nazwy do niego, plus kierunek slashy, bo Windows to dalej ma je źle:

Kod:
(define (center-on-background background-file input-file output-file)
(let* (
    (input-image (car (gimp-file-load RUN-NONINTERACTIVE input-file input-file)))
    (background-image (car (gimp-file-load RUN-NONINTERACTIVE background-file background-file)))
    (input-layer (car (gimp-image-get-active-layer input-image)))
    (bg-width (car (gimp-image-width background-image)))
    (bg-height (car (gimp-image-height background-image)))
    (input-width (car (gimp-image-width input-image)))
    (input-height (car (gimp-image-height input-image)))
    (x-pos (/ (- bg-width input-width) 2))
    (y-pos (/ (- bg-height input-height) 2))
  )

  (gimp-edit-copy input-layer)
  (let* (
      (new-layer (car (gimp-layer-new background-image bg-width bg-height RGBA-IMAGE "Layer" 100 NORMAL-MODE)))
    )

    (gimp-image-add-layer background-image new-layer -1)
    (gimp-image-set-active-layer background-image new-layer)
    (gimp-edit-paste new-layer TRUE)
    (gimp-layer-set-offsets new-layer x-pos y-pos)
    (gimp-floating-sel-anchor (car (gimp-image-get-active-layer background-image)))
  )

  (gimp-image-flatten background-image)
  (gimp-file-save RUN-NONINTERACTIVE background-image (car (gimp-image-get-active-layer background-image)) output-file output-file)

  (gimp-image-delete input-image)
  (gimp-image-delete background-image)
))

(define (filename-from-path path)
  (car (reverse (strbreakup path "\\")))
)

(define (basename-from-filename file-name)
  (car (strbreakup file-name "."))
)

(define (center-on-background-batch background-file input-pattern result-directory)
(let* (
    (files (cadr (file-glob input-pattern 1)))
  )
  (while (not (null? files))
    (let* (
        (file-name (car files))
        (output-filename (string-append result-directory "\\" (basename-from-filename (filename-from-path file-name)) ".jpg"))
      )
      (center-on-background background-file file-name output-filename)
    )

    (set! files (cdr files))
  )
))

Możesz tym zastąpić poprzedni plik (nazwa pliku nie gra roli, liczy się tylko rozszerzenie, musi być "scm").

 [lp] możliwe, że "gimp", będzie u Ciebie poleceniem nie rozpoznanym, albo dodać do zmiennej PATH, albo wywoływać całą ścieżkę:

Kod:
"C:\Program Files\GIMP 2\bin\gimp-2.10.exe"

To akurat łatwo sprawdzić, bo jeśli wpiszesz we wierszu poleceń powyższe polecenie, to otworzy się gimp:

Kod:
Microsoft Windows [Version 10.0.19045.4894]
(c) Microsoft Corporation. Wszelkie prawa zastrzeżone.

C:\Users\ziomi\Documents\pictures>"C:\Program Files\GIMP 2\bin\gimp-2.10.exe"

 [lp] Jak uruchomić wiersz poleceń? otwórz Menu Start, wpisz "cmd", pojawi się program "Wiersz poleceń", to ten. Takie czarne okienko z biały tekstem.

 [lp] Ale można uruchomić też konsole przez wpisanie "cmd", w pasek adresu (tam gdzie się wyświetla jaki katalog otwierasz)

(https://www.gimpuj.info/gallery/98/8_08_10_24_9_19_21.png)

 [lp] Czyli całe polecenie w systemie Windows będzie wyglądać tak:

Kod:
"C:\Program Files\GIMP 2\bin\gimp-2.10.exe" -i -b "(center-on-background-batch \"tlo.png\" \"input\\*.jpg\" \"output\" )" -b "(gimp-quit 0)"

Tu jedyne na co trzeba zwrócić uwagę, to jak podajesz nazwę katalogów, to trzeba pisać \\ (podwójny backslash, bo to Winndows).

 [lp] Pojawi się drugie okno z wynikami polecenia.