Polskie Forum Użytkowników GIMP-a

Hyde zone => Zlecę / Kupię => Wątek zaczęty przez: mariuszole on 12.11.2022, 22:56:50



Tytuł: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 12.11.2022, 22:56:50
Witam potrzebuje skrypt Script-Fu, który:

1. Dokładnie przytnie obraz.
2. Jeśli obraz przekracza 1500px przeskaluje do 1490px, obraz ma być kwadratem, wyśrodkowany, zostanie dodana biała ramka 5px aby cały obraz miał 1500px.
3. Jeśli obraz ma mniej niż 1500px nie będzie skalowany i zostanie dodana biała ramka 5px, obraz ma być kwadratem, wyśrodkowany.
4. Plik zostanie zapisany jako xfc oraz jpg w katalogu z którego zostało otworzone zdjęcie.

Dla osoby obeznanej w temacie to kwadrans pracy, tak przynajmniej myślę, cena jaką proponuje 50zł (przelew) :)


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 13.11.2022, 11:22:45
Co znaczy, że "obraz ma być kwadratem"?
Czy chodzi o to, że one już są kwadratami? Czy, że ma być skalowany do kwadratu? Czyli zawsze skalujemy obraz do wymiarów kwadratu? w górę, czy w dół?


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 13.11.2022, 13:27:54
Pliki do edycji nie zawsze są kwadratami, mogą być prostokątami, plik wyjściowy ma być kwadratem. Skalujemy w dół aby zmniejszyć rozmiar pliku. Skalowanie grafiki w górę raczej pogorszy jej jakość.

Potrzebuje tego skryptu do szybkiej edycji grafiki produktowej - produkt na białym tle gdzie nie dotyka ramki w odpowiedniej rozdzielczości.

Czy istnieje możliwość aby skrypt pobierał nazwę pliku do zapisania z podręcznej pamięci systemu (nazwa skopiowana myszką, prawy przycisk, kopiuj)? Korzystam z Ubuntu.
Czy można tak ustawić skrypt aby poniżej 1500px podciągał obramowanie w gorę do pełnych dziesiątek np. 610x610 lub 750x750px przy czym obraz miał 602x602 i 745x745


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 14.11.2022, 21:37:18
To jeszcze nie skończone, ale zerknij, czy o coś takiego chodzi.

Kod:
(define (resize-and-add-border image drawable)
    (gimp-image-undo-group-start image)
    (plug-in-autocrop RUN-NONINTERACTIVE image drawable)

(let* (
(width (car (gimp-image-width image)))
(height (car (gimp-image-height image)))
(new-width (if (< width 1490) width 1490))
(new-height (if (< height 1490) height 1490))
(square-size (if (< new-width new-height) new-width new-height))
)

(gimp-image-scale image square-size square-size)
(gimp-image-resize image (+ square-size 10) (+ square-size 10) 5 5)
(gimp-layer-resize-to-image-size drawable)

(gimp-selection-all image)
(gimp-selection-border image 5)
(gimp-edit-bucket-fill drawable BG-BUCKET-FILL NORMAL-MODE 100 0 0 0 0)
)

    (gimp-image-undo-group-end image)
    (gimp-displays-flush)
)

(script-fu-register "resize-and-add-border"
    "<Image>/Script-Fu/Resize and add border"
    "Automatically adjust contrast of drawable"
    "Ziomioslaw"
    "Ziomioslaw"
    "2022"
    "*"
    SF-IMAGE    "Image"         0
    SF-DRAWABLE "Current Layer" 0
)


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 14.11.2022, 21:57:51
Mniej więcej o to chodzi :) aby lepiej zobrazować wrzucam zdjęcie pliku wejściowe i wyjściowego, widać co chce osiągnąć.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 15.11.2022, 13:20:38
Tu nie ma tej białej ramki, to tak ma być?
A przezroczystość nie zostanie zapisana w jpg


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: be@ on 15.11.2022, 14:59:07
A przezroczystość nie zostanie zapisana w jpg
Przy eksporcie do JPG przezroczystość i tak zamieni się na białe tło, o ile w przyborniku jest ustawiony kolor tła na biały, czyli tak jak jest domyślnie.

Z tego co zrozumiałam, obraz ma być przeskalowany z zachowaniem proporcji tak, aby krótszy bok miał te 1490px, a następnie dłuższy bok ma być przycięty do tego samego rozmiaru? I zapewne ma być przycięty jednakowo po obu stronach, aby produkt znajdował się na środku tła? Tylko nie zawsze da się przy takim automatycznym kadrowaniu uniknąć przycięcia fragmentu produktu...
Jeśli wszystkie zdjęcia są renderami na przezroczystym lub całkowicie białym tle, to najlepiej by było najpierw użyć opcji przytnij obraz, która przytnie tylko przezroczyste lub jednolicie białe pixele dookoła produktu (no chyba, że już są tak przycięte, to można pominąć tę operację), a następnie w razie potrzeby przeskalować, aby dłuższy bok miał te 1490px i wrzucić z wyśrodkowaniem na kwadratowe, białe tło o wybranych wymiarach.

A tak z ciekawości, to na Allegro te fotki? Bo jestem ciekawa, na jakiej zasadzie są akceptowane te miniatury tam. Czy to musi być jakiś procent białego, czy chodzi o szerokość białego obramowania? Przykładowo, czy przejdzie miniatura, gdzie produkt jest na ciemnym tle, ale cały obraz ma białą ramkę o szerokości 5px?


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 15.11.2022, 18:46:08
A to jeszcze jedno, bo widzę, że zdjęcie nie zostało przeskalowane, tylko wymiary tego obrazka zostały zmienione. To w końcu jak ma być?


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 15.11.2022, 23:07:29
Przy eksporcie do JPG przezroczystość i tak zamieni się na białe tło, o ile w przyborniku jest ustawiony kolor tła na biały, czyli tak jak jest domyślnie.

Tak, dokładnie.

Z tego co zrozumiałam, obraz ma być przeskalowany z zachowaniem proporcji tak, aby krótszy bok miał te 1490px, a następnie dłuższy bok ma być przycięty do tego samego rozmiaru? I zapewne ma być przycięty jednakowo po obu stronach, aby produkt znajdował się na środku tła? Tylko nie zawsze da się przy takim automatycznym kadrowaniu uniknąć przycięcia fragmentu produktu...
Jeśli wszystkie zdjęcia są renderami na przezroczystym lub całkowicie białym tle, to najlepiej by było najpierw użyć opcji przytnij obraz, która przytnie tylko przezroczyste lub jednolicie białe pixele dookoła produktu (no chyba, że już są tak przycięte, to można pominąć tę operację), a następnie w razie potrzeby przeskalować, aby dłuższy bok miał te 1490px i wrzucić z wyśrodkowaniem na kwadratowe, białe tło o wybranych wymiarach.

Nie zdarzało mi się aby kadrowanie do zawartości czy dokładnie przytnij obcinało produkt, prędzej było niedocięcie, wtedy kubełek w ruch i problem rozwiązany :) Pracuję zazwyczaj na produktach na białym tle lub przezroczystym - taki jest obecnie standard w fotografii produktowe. Chciałbym mieć produkt na polu kwadratu, tak jest optymalnie dla mnie.


A tak z ciekawości, to na Allegro te fotki? Bo jestem ciekawa, na jakiej zasadzie są akceptowane te miniatury tam. Czy to musi być jakiś procent białego, czy chodzi o szerokość białego obramowania? Przykładowo, czy przejdzie miniatura, gdzie produkt jest na ciemnym tle, ale cały obraz ma białą ramkę o szerokości 5px?

Nikt nie akceptuje miniatur, wszystko odbywa się automatycznie, jeśli nikt nie zgłosi takiego zdjęcia to może wisieć na portalu aukcyjnym. Produkt nie może dotykać ramki, ponieważ wpływa to na jakość oceny zdjęcia i pozycje w wyszukiwarce. Zalecenie jest takie aby produkt był na białym tle.

A to jeszcze jedno, bo widzę, że zdjęcie nie zostało przeskalowane, tylko wymiary tego obrazka zostały zmienione. To w końcu jak ma być?

Skalowanie dopiero powyżej 1500px, podany przykład miał mniej niż 1500px i zmianie podlegały tylko wymiary - produkt ma być wystarczająco czytelny i w miarę szybko się wczytywać.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: be@ on 16.11.2022, 14:35:53
A jeśli render ma dokładnie 1500px, czyli nie ma być skalowany, to przecież będzie dotykał krawędzi obrazu. Po dodaniu obramowania natomiast przekroczy wymiary, a jeśli obramowanie zostanie dodane wewnątrz, to zakryje część produktu...

Wydaje mi się, że skoro obrazem wejściowym jest render z tłem przyciętym do zawartości (tak przynajmniej zrozumiałam i tak wynika z załączonego przykładu), to należałoby go przeskalować do 1490px, jeśli te wymiary przekracza i wrzucić wtedy na biały kwadrat o boku 1500px. Dobrze myślę?


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 16.11.2022, 14:57:38
Tak dokładnie, nic dodać nic ując :)


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 16.11.2022, 20:19:31
Spróbujcie teraz:

Kod:
(define (resize-and-add-border image drawable)
(gimp-image-undo-group-start image)
(plug-in-autocrop RUN-NONINTERACTIVE image drawable)

(let* (
(square-size 1500)
(current-width (car (gimp-image-width image)))
(current-height (car (gimp-image-height image)))
(wanted-width (min (- square-size 10) current-width))
(wanted-height (min (- square-size 10) current-height))
(ratio (min (/ wanted-width current-width) (/ wanted-height current-height)))
(width (* ratio current-width))
(height (* ratio current-height))
)

(gimp-image-scale image width height)
(gimp-image-resize image square-size square-size (/ (- square-size width) 2) (/ (- square-size height) 2))
)

(gimp-image-undo-group-end image)
(gimp-displays-flush)
)

(script-fu-register "resize-and-add-border"
"<Image>/Script-Fu/Resize and add border"
"Automatically adjust contrast of drawable"
"Ziomioslaw"
"Ziomioslaw"
"2022"
"*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Current Layer" 0
)

Skaluje do max 1490 z zachowaniem proporcji, i umieszcza to w kwadracie, na środku.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 16.11.2022, 21:45:39
Sprawdziłem, ładnie działa dla grafik powyżej 1500px, poniżej 1500px powiększa wymiary płótna do 1500px a pasuje, żeby nie skalował w górę.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: be@ on 16.11.2022, 21:55:57
Hmm, ja cały czas rozumiałam, że wymiary płótna mają wynosić 1500 x 1500px, a tylko rendery nie mają być skalowane, jeśli nie przekraczają 1490px. Sam potwierdziłeś, że ma być tak, jak pisałam w poprzednim poście, to nie wiem , o co chodzi. Testowałam skrypt i nie skaluje samego rendera w górę, a jedynie wrzuca na tło o boku 1500px.

Czyli to ma być tak, że jeśli render ma mniej niż 1490px, to ma być wrzucony na kwadratowe tło o boku o 10px dłuższym, niż dłuższy bok rendera, a nie na kwadrat o boku 1500px?


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 16.11.2022, 22:03:39
Jeśli masz obrazek, którego obie krawędzie są mniejsze niż 1500, to zostanie wyśrodkowany. Sprawdziłem właśnie.
Może zamieść obrazek, który sprawia problemy.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 16.11.2022, 22:10:24
Przepraszam zakręciłem się, wymiary płótna poniżej 1500 mają być dopasowane do wymiaru produktu, dalej ma być kwadratem i mają mieć ramkę aby obrazek nie dotykał krawędzi.

Jeśli zdjęcie ma 1000px a płótno wyniesie 1500x1500px wtedy produkt na miniaturce Allegro będzie malutki. Co innego jeśli uzyskamy obraz 1010x1010px, wtedy miniaturka będzie czytelna.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: be@ on 16.11.2022, 22:17:00
Nie może mieć ramki, bo ramka 5px, tak jak pisałeś w pierwszym poście, nie sprawi, że prostokątny obraz stanie się kwadratem i pewnie stąd całe nieporozumienie. Jak do rendera o wymiarach 1000 x 500px dodasz taką ramkę, to będzie miał wymiary 1010 x 510px, a to zdecydowanie nie jest kwadrat.

A więc ostatecznie chodzi o to, aby tło było kwadratem o boku o 10px dłuższym niż dłuższy bok rendera, ale nie może przekraczać 1500px. Z kolei wymiary samego rendera nie mogą przekraczać 1490px?


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 16.11.2022, 22:41:31
Musiałem przeczytać 2 razy, dokładnie o to chodzi :)


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 17.11.2022, 17:54:55
Takie coś?

Kod:
(define (resize-and-add-border image drawable)
(gimp-image-undo-group-start image)
(plug-in-autocrop RUN-NONINTERACTIVE image drawable)

(let* (
(current-width (car (gimp-image-width image)))
(current-height (car (gimp-image-height image)))
(square-size (if
(or (> current-width 1490) (> current-height 1490))
1500
(+ (max current-width current-height) 10)
))
(wanted-width (min (- square-size 10) current-width))
(wanted-height (min (- square-size 10) current-height))
(ratio (min (/ wanted-width current-width) (/ wanted-height current-height)))
(width (* ratio current-width))
(height (* ratio current-height))
)

(gimp-image-scale image width height)
(gimp-image-resize image square-size square-size (/ (- square-size width) 2) (/ (- square-size height) 2))
)

(gimp-image-undo-group-end image)
(gimp-displays-flush)
)

(script-fu-register "resize-and-add-border"
"<Image>/Script-Fu/Resize and add border"
"Automatically adjust contrast of drawable"
"Ziomioslaw"
"Ziomioslaw"
"2022"
"*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Current Layer" 0
)


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 17.11.2022, 21:24:47
Nie mogę wczytać skryptu, przy odświeżaniu dostaje taki błąd:

Błąd podczas wczytywania /home/abakus/.config/GIMP/2.10/scripts/zdjecia-1500.scm:

Error: (/home/abakus/.config/GIMP/2.10/scripts/zdjecia-1500.scm : 1) eval: unbound variable: [



Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 17.11.2022, 23:30:34
Jak wklejałem dodałem [, wystarczy usunąć. Poprawiłem.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 18.11.2022, 08:54:19
Dziękuję, działa idealnie, mam jeszcze pytanie: Czy istnieje możliwość aby skrypt pobierał nazwę pliku do zapisania z podręcznej pamięci systemu (nazwa skopiowana myszką, prawy przycisk, kopiuj)? Korzystam z Ubuntu.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 18.11.2022, 12:40:52
A Ty niechciałeś tego uruchamiać na zawartości katalogu?


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 18.11.2022, 12:45:42
Nie, każdy produkt umieszczam w folderze według schematu: nazwa firma/marka -> kod EAN

Wole sprawdzić zanim zapiszę i dodam do sklepu.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 18.11.2022, 18:43:23
Hmm, no ja myślałem, że to będzie wywoływane z konsolki.

Spróbuj tego:

Kod:
(define (resize-into-square image drawable)
  (gimp-image-undo-group-start image)
  (plug-in-autocrop RUN-NONINTERACTIVE image drawable)

  (let* (
      (current-width (car (gimp-image-width image)))
      (current-height (car (gimp-image-height image)))
      (square-size (if
          (or (> current-width 1490) (> current-height 1490))
          1500
          (+ (max current-width current-height) 10)
      ))
      (wanted-width (min (- square-size 10) current-width))
      (wanted-height (min (- square-size 10) current-height))
      (ratio (min (/ wanted-width current-width) (/ wanted-height current-height)))
      (width (* ratio current-width))
      (height (* ratio current-height))
    )

    (gimp-image-scale image width height)
    (gimp-image-resize image square-size square-size (/ (- square-size width) 2) (/ (- square-size height) 2))
  )

  (gimp-image-undo-group-end image)
  (gimp-displays-flush)
)

(define (resize-into-square-save pattern)
  (let* (
      (filelist (cadr (file-glob pattern 1)))
    )

    (while (not (null? filelist))
      (let* (
          (file-name (car filelist))
          (image (car (gimp-file-load RUN-NONINTERACTIVE file-name file-name)))
          (drawable (car (gimp-image-get-active-layer image)))
          (file-name-without-extension (unbreakupstr (butlast (strbreakup file-name ".")) "."))
        )

        (resize-into-square image drawable)
        (gimp-file-save RUN-NONINTERACTIVE image drawable (string-append file-name-without-extension ".jpg") (string-append file-name-without-extension ".jpg"))
        (gimp-file-save RUN-NONINTERACTIVE image drawable (string-append file-name-without-extension ".xcf") (string-append file-name-without-extension ".xcf"))
        (gimp-image-delete image)
      )

      (set! filelist (cdr filelist))
    )
  )
)

(script-fu-register "resize-into-square"
    "<Image>/Script-Fu/Resize and add border"
    "Automatically adjust contrast of drawable"
    "Ziomioslaw"
    "Ziomioslaw"
    "2022"
    "*"
    SF-IMAGE "Image" 0
    SF-DRAWABLE "Current Layer" 0
)

To jak umieścisz w Twoim katalogu ze skryptami (szczegóły: https://www.joelotz.com/blog/2020/batch-autocrop-png-images-in-gimp.html (https://www.joelotz.com/blog/2020/batch-autocrop-png-images-in-gimp.html)), to będziesz mógł potem wejść do katalogu gdzie są obrazki.

To pozwoli Ci zrobić potem w konsoli coś takiego:

Kod:
gimp -i -b '(resize-into-square-save "*.png")' -b '(gimp-quit 0)'

Uwaga: pamiętaj, że plik 'a.png' zostanie zapisany jako 'a.jpg' i 'a.xcf', więc testuj na początku na katalogu, w którym nie ma plików o innym rozszerzeniu.

Jeśli Ci to nie odpowiada, po prostu dodamy parametr na nazwę, dobrze?


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 18.11.2022, 22:21:04
Nie brałem pod uwagę edycji zdjęć przez konsolę, zawsze jakieś nowe rozwiązanie  :)

Sprawdziłem, faktycznie zostały utworzone nowe pliki z tym, że plik wyjściowy nie był kwadratem.

Ze zdjęciami z przezroczystym tłem png nie ma problemu, można przerabiać przez konsolę, nie ma tutaj konfliktu nazw, ich jakość jest zazwyczaj dobra. Gdy mamy a.png wychodzi a.xfc i a.jpg, natomiast przy a.jpg otrzymamy a.xfc i a.jpg, który nadpisze oryginalny plik?

Pliki jpg wymagają więcej uwagi, czasem trzeba użyć kubełka, coś wymazać itp, dlatego warto jest otworzyć w plik w Gimpie i sprawdzić.

Jeśli Ci to nie odpowiada, po prostu dodamy parametr na nazwę, dobrze?

Możesz doprecyzować?


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 19.11.2022, 00:10:11
Sprawdziłem, faktycznie zostały utworzone nowe pliki z tym, że plik wyjściowy nie był kwadratem.

Aha, do poprawy.

Ze zdjęciami z przezroczystym tłem png nie ma problemu, można przerabiać przez konsolę, nie ma tutaj konfliktu nazw, ich jakość jest zazwyczaj dobra. Gdy mamy a.png wychodzi a.xfc i a.jpg, natomiast przy a.jpg otrzymamy a.xfc i a.jpg, który nadpisze oryginalny plik?

Tak, zapis jest zawsze do jpg i xcf. Można to zmienić, tylko na jakie?

Jeśli Ci to nie odpowiada, po prostu dodamy parametr na nazwę, dobrze?

Możesz doprecyzować?

To chyba niepotrzebne, skoro chcesz ręcznie edytować obrazki.
Chodziło mi o nazwę pliku, do którego zostanie zapisany obrazek. Teraz jest to zawsze nazwa oryginału bez rozszerzenia.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 19.11.2022, 10:49:58
Sprawdziłem ten skrypt, robi kwadraty dla małych obrazków. Możesz podać wymiary, które są problamatyczne?


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 19.11.2022, 17:50:12
Nie działa po uruchomieniu z terminala 650x650.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 19.11.2022, 20:20:42
No tworzy się kwadrat o boku 660x660.
Czy jak otworzysz ten sam obrazek w GIMP i wybierzesz Obraz -> Przytnij dokładnie, to ciągle obrazek będzie kwadratem?

PS. "Przytnij dokładnie" wycina także nie używane obszary (na podstawie koloru tła) z wnętrza obrazka.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: mariuszole on 19.11.2022, 22:12:54
Wysłałem w PW link do zdjęcia, które po uruchomieniu w konsoli nie jest kwadratem.
Przez GIMP działa normalnie (tworzy kwadrat) ale nie zapisuje do pliku.

95% procent zdjęć to 1 produkt i opcja "Przytnij dokładnie" się sprawdza. Pozostałych przypadkach jest czasem problem, ponieważ 2 produkty "ściska" do siebie.


Tytuł: Odp: Opracowanie Skyptu Script-Fu
Wiadomość wysłana przez: Ziomioslaw on 20.11.2022, 07:58:26
Wydaje się, że problemem była przezroczystość (najwyraźniej, czy zapisie do jgp jest ona automatycznie usuwana). To widać na plikach xcf.
Dodałem usuwanie przezroczystości przed zapisem do jpg.

Kod:
(define (resize-into-square image drawable)
  (gimp-image-undo-group-start image)
  (plug-in-autocrop RUN-NONINTERACTIVE image drawable)

  (let* (
      (current-width (car (gimp-image-width image)))
      (current-height (car (gimp-image-height image)))
      (square-size (if
          (or (> current-width 1490) (> current-height 1490))
          1500
          (+ (max current-width current-height) 10)
      ))
      (wanted-width (min (- square-size 10) current-width))
      (wanted-height (min (- square-size 10) current-height))
      (ratio (min (/ wanted-width current-width) (/ wanted-height current-height)))
      (width (* ratio current-width))
      (height (* ratio current-height))
    )

    (gimp-image-scale image width height)
    (gimp-image-resize image square-size square-size (/ (- square-size width) 2) (/ (- square-size height) 2))
  )

  (gimp-layer-resize-to-image-size drawable)
  (gimp-image-undo-group-end image)
  (gimp-displays-flush)
)

(define (resize-into-square-save pattern)
  (let* (
      (filelist (cadr (file-glob pattern 1)))
    )

    (while (not (null? filelist))
      (let* (
          (file-name (car filelist))
          (image (car (gimp-file-load RUN-NONINTERACTIVE file-name file-name)))
          (drawable (car (gimp-image-get-active-layer image)))
          (file-name-without-extension (unbreakupstr (butlast (strbreakup file-name ".")) "."))
        )

        (resize-into-square image drawable)

        (gimp-file-save RUN-NONINTERACTIVE image drawable (string-append file-name-without-extension ".xcf") (string-append file-name-without-extension ".xcf"))

        (gimp-layer-flatten drawable)
        (gimp-file-save RUN-NONINTERACTIVE image drawable (string-append file-name-without-extension ".jpg") (string-append file-name-without-extension ".jpg"))

        (gimp-image-delete image)
      )

      (set! filelist (cdr filelist))
    )
  )
)

(script-fu-register "resize-into-square"
    "<Image>/Script-Fu/Resize and add border"
    "Automatically adjust contrast of drawable"
    "Ziomioslaw"
    "Ziomioslaw"
    "2022"
    "*"
    SF-IMAGE "Image" 0
    SF-DRAWABLE "Current Layer" 0
)