Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?


Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Polskie Forum Użytkowników GIMP-aOgólne dyskusjePomocna dłońGIMP - pomoc (Moderator: be@)Wątek: Generowanie dużej ilości plików PNG z pliku TXT
Strony: [1]
DrukujPobierz PDF
Autor Wątek: Generowanie dużej ilości plików PNG z pliku TXT  (Przeczytany 1428 razy)
0 użytkowników i 1 Gość przegląda ten wątek.
Gimpo-cienias
Nowicjusz

Reputacja: 0 Offline Offline

Wiadomości: 6
Galeria Użytkownika

Gimpo-cienias


Zobacz profil
« : 22.01.2022, 01:42:02 »

Witajcie.
Potrzebuję zrobić projekt polegający na stworzeniu według szablonu kilkuset obrazków lub więcej. Wydaje się, że GIMP jest odpowiedni, ale jakbym robił jedną sztukę, albo kilka to nie byłoby tematu. Mam plik tekstowy a w nim dwie kolumny z tekstem rozdzielanym przecinkami:
1, jeden
2, dwa
3, trzy
… itd.
Potrzebuję utworzyć plik png o rozmiarach z jakiegoś szablonu, np. 1000x1200. Właśnie, czy użyć szablonu, czy wcześniej zrobić pusty plik PNG i go otwierać? Czy można zrobić skrypt, który pobierze pierwszą linię pliku txt, pierwszą zmienną użyje na później do nadania nazw plikom, a drugą zmienną wklei do pola tekstowego?

Pole tekstowe trzeba rozszerzyć od lewego do prawego brzegu, zwiększyć czcionkę, aby wypełniała to okienko maksymalnie. Tutaj zmiana koloru czcionki i tła. Z tym bym sobie poradził. Pytanie tylko, bo zmienna miałaby różną długość znaków, więc czy wielkość liter można byłoby ustawić tak jak np. w Excelu, żeby dopasował do szerokości komórki? Aby mieć pewność, że wszystko się zmieści w jednej linii a jednocześnie było od brzegu do brzegu.

No i na koniec skrypt miałby zapisać projekt w formacie gimp oraz wyeksportować do PNG, do nadania nazw plikom używając pierwszej zmiennej z pliku tekstowego.

No i jak to zrobi, to w następnej iteracji miałby zrobić to samo dla kolejnych danych z pliku tekstowego.

Nie wiem czy da się to zrobić skryptem w GIMP ani jak to zrobić. Widziałem różne skrypty do GIMP, ale one tylko robią coś z obrazem. Z VBA wiedziałbym co zrobić w Excelu, a tutaj nie wiem, czy iść tym tropem, czy sobie odpuścić Gimp. Może jest coś prostszego do tego celu? Najlepiej jakby można było rejestrować makro jak w MS Excelu, bo wtedy nie trzeba być mega programistą, aby taki skrypt posklejać.

No i czy mam zainteresować się konsolą Script-Fu, Pyton-Fu, czy raczej tworzyć pliki *.py lub *scm? Działam na Win7 lub Win10, oba 64bit.
Zapisane
Ziomioslaw
Administrator

Reputacja: 46 Offline Offline

Płeć: Mężczyzna
GIMP: 2.10
JID: ziomioslaw@jabber.org
Licencja: Copyright
Wiadomości: 7 431
Galeria Użytkownika


Cyklista Apokalipsy


Zobacz profil
« Odpowiedz #1 : 22.01.2022, 08:44:56 »

Cytuj
Pole tekstowe trzeba rozszerzyć od lewego do prawego brzegu, zwiększyć czcionkę, aby wypełniała to okienko maksymalnie. Tutaj zmiana koloru czcionki i tła. Z tym bym sobie poradził. Pytanie tylko, bo zmienna miałaby różną długość znaków, więc czy wielkość liter można byłoby ustawić tak jak np. w Excelu, żeby dopasował do szerokości komórki? Aby mieć pewność, że wszystko się zmieści w jednej linii a jednocześnie było od brzegu do brzegu.

Najprościej zacząć od przygotowania jednego skryptu, który weźmie ten Twój obrazek i zrobi napis jaki będziesz chciał. Bo można oczywiście zwiększać czcionkę, ale to też powoduje powiększanie się tekstu w pionie.
Oprócz zmiany wielkości czcionki, można w GIMP-ie zwiększyć odstępy między poszczególnymi literami, może to Ci podpasuje? Popróbuj (bezpośrednio w GIMP-ie).
No i sam tekst, można traktować jak obrazek, czyli np.: go skalować.

Cytuj
No i czy mam zainteresować się konsolą Script-Fu, Pyton-Fu, czy raczej tworzyć pliki *.py lub *scm? Działam na Win7 lub Win10, oba 64bit.

Raczej interesują Cię pliki.
Zapisane
be@
Moderator globalny

Reputacja: 49 Offline Offline

Płeć: Kobieta
GIMP: 2.8
Licencja: CC-BY
Wiadomości: 7 400
Galeria Użytkownika



Zobacz profil
« Odpowiedz #2 : 22.01.2022, 12:54:26 »

Nigdy nie słyszałam o skrypcie do GIMP-a, który pobiera dane z pliku tekstowego i wstawia do kolejnych obrazów/warstw. Rozumiem, że chodzi o coś takiego jak np. tworzenie winietek, gdzie po kolei trzeba wpisać różne nazwiska do kilkudziesięciu takich samych obrazków. Wiem, że taka opcja jest w AI (https://grafmag.pl/artykuly/generujemy-swiateczne-kartki-z-wykorzystaniem-zmiennych-illustratora lub https://youtu.be/xA3cznd14-c) i zapewne też PS, ale obawiam się, że GIMP sobie z czymś takim nie radzi. No ale może się mylę i ktoś tu poda na to sposób...
Jeśli chodzi o wypełnienie tekstem całej szerokości obrazu/pola tekstowego, to z tego co przetestowałam, Justowanie: Wypełnione nie działa prawidłowo w GIMP, gdy mamy tylko jedną linijkę tekstu Smutny

https://www.gimpuj.info/index.php/topic,68518.0.html - tu jest podobny wątek, tylko nieco mniejsze wymagania
« Ostatnia zmiana: 22.01.2022, 13:46:25 wysłane przez be@ » Zapisane
Ziomioslaw
Administrator

Reputacja: 46 Offline Offline

Płeć: Mężczyzna
GIMP: 2.10
JID: ziomioslaw@jabber.org
Licencja: Copyright
Wiadomości: 7 431
Galeria Użytkownika


Cyklista Apokalipsy


Zobacz profil
« Odpowiedz #3 : 22.01.2022, 14:29:01 »

Już Ci odpowiedziałem na shoucie, że jest to możliwe, albo osiągalne także w GIMP-ie.
Zapisane
be@
Moderator globalny

Reputacja: 49 Offline Offline

Płeć: Kobieta
GIMP: 2.8
Licencja: CC-BY
Wiadomości: 7 400
Galeria Użytkownika



Zobacz profil
« Odpowiedz #4 : 22.01.2022, 14:38:42 »

Już Ci odpowiedziałem na shoucie, że jest to możliwe...
A to nie mnie masz odpowiadać, tylko autorowi wątku Język Jeśli możliwe, to udowodnij Mrugnięcie

@Gimpo-cienias - a nie może być ten tekst po prostu wyśrodkowany? Musi być na całą szerokość grafiki? Jeśli w części plików będą większe litery, to może dziwnie wyglądać. W przypadku dużej różnicy w długości tekstów również samo justowanie w trybie wypełnienia może dać nieciekawy efekt nadmiernie rozstrzelonych liter. Lepiej już, żeby tekst był wyśrodkowany i w dwóch wierszach, kiedy jest dłuższy
« Ostatnia zmiana: 22.01.2022, 19:53:23 wysłane przez be@ » Zapisane
Gimpo-cienias
Nowicjusz

Reputacja: 0 Offline Offline

Wiadomości: 6
Galeria Użytkownika

Gimpo-cienias


Zobacz profil
« Odpowiedz #5 : 22.01.2022, 15:57:54 »

Biorę pod uwagę takie rozwiązanie, aby tylko wyjustować. W excellu użyłbym funkcji liczącej ilość znaków, posortował i podzielił sobie zadanie w ten sposób, że tam gdzie tekst nie mieściłby się, użyłbym mniejszej czcionki.
Zapisane
Gimpo-cienias
Nowicjusz

Reputacja: 0 Offline Offline

Wiadomości: 6
Galeria Użytkownika

Gimpo-cienias


Zobacz profil
« Odpowiedz #6 : 22.01.2022, 22:28:12 »

Całą sobotę nad tym siedziałem i mętlik większy w głowie mam.
https://boardgamegeek.com/thread/1925214/laying-out-cards-quickly-gimp-and-bit-programming
Ten wątek jest ciekawy, teraz jakby go uprościć do dwóch zmiennych, a w zasadzie do jednej warstwy. Ktoś porządnie nakombinował z tym wszystkim.
Zapisywanie dla każdej zmiennej jako projekt gimp xcf jest w zasadzie bez sensu i niepotrzebne, do takiego wniosku doszedłem. W wątku jest też o pobieraniu danych z pliku zewnętrznego. Chyba najlepszym rozwiązaniem byłoby tworzenie warstwy dla każdej nowej zmiennej i po eksporcie do PNG jej usuwanie. Druga droga to utworzenie warstw dla wszystkich zmiennych i ich aktywowanie do eksportu, ale to na pewno zamuli program i zeżre niepotrzebnie dużo zasobów. Dawno temu programowałem w Delphi gdzie RAM był w ilości 64MB, no to pamiętam czego nie powinno się robić, żeby szanować zasoby sprzętowe :-) Plik xcf z tego wątku ma 260MB a to tylko 128kart, więc wydaje się, że trzeba projekty dobrze przemyśleć. Chyba, że grafika jest trzymana w tym pliku i dlatego taki rozmiar.
Zapisane
Gimpo-cienias
Nowicjusz

Reputacja: 0 Offline Offline

Wiadomości: 6
Galeria Użytkownika

Gimpo-cienias


Zobacz profil
« Odpowiedz #7 : 26.01.2022, 13:33:51 »

Zatrzymało mnie na takim etapie:


#!/usr/bin/env python
from gimpfu import *
import csv

with open('D:\GimpSkrypty\skrypt1.csv') as plik:
 readCSV = csv.reader (plik, delimiter=";")
 for wiersz in readCSV:
  nrwiersza=wiersz[0] # to bede uzywac do nadania nazwy pliku
  napis=wiersz[1] #to bede uzywac do stworzenia napisu
  hello_world(napis)


#http://www.efalk.org/Docs/Python/gimp-examples.html - stad wzialem i przerobilem poniasza funkcje:
def hello_world(napis):
      if font == 'Comic Sans MS' :
       initstr = "Comic Sans? Are you sure?"

img = gimp.Image(1, 1, RGB)
pdb.gimp_context_push()
gimp.set_foreground(125, 175, 188)
layer = pdb.gimp_text_fontname(img, None, 0, 0, napis, 10, True, 100, PIXELS, "Tahoma")
img.resize(layer.width, layer.height, 0, 0)
background = gimp.Layer(img, "Background", layer.width, layer.height, RGB_IMAGE, 100, NORMAL_MODE)
background.fill(BACKGROUND_FILL)
img.add_layer(background, 1)
gimp.Display(img)
gimp.displays_flush()
pdb.gimp_context_pop()
return


A tak to wygląda na konsoli:

>>>
>>>
>>> #!/usr/bin/env python
>>> from gimpfu import *
>>> import csv
>>>
>>> with open('D:\GimpSkrypty\skrypt1.csv') as plik:
...  readCSV = csv.reader (plik, delimiter=";")
...  for wiersz in readCSV:
...   nrwiersza=wiersz[0] # to bede uzywac do nadania nazwy pliku
...   napis=wiersz[1] #to bede uzywac do stworzenia napisu
...   hello_world(napis)
...
Traceback (most recent call last):
  File "<input>", line 6, in <module>
TypeError: hello_world() takes no arguments (1 given)

>>>
>>> #http://www.efalk.org/Docs/Python/gimp-examples.html - stad wzialem i przerobilem ponizsza funkcje:
>>> def hello_world(napis):
...       if font == 'Comic Sans MS' :
...        initstr = "Comic Sans? Are you sure?"
...
>>> img = gimp.Image(1, 1, RGB)
>>> pdb.gimp_context_push()
>>> gimp.set_foreground(125, 175, 188)
>>> layer = pdb.gimp_text_fontname(img, None, 0, 0, napis, 10, True, 100, PIXELS, "Tahoma")
>>> img.resize(layer.width, layer.height, 0, 0)
>>> background = gimp.Layer(img, "Background", layer.width, layer.height, RGB_IMAGE, 100, NORMAL_MODE)
>>> background.fill(BACKGROUND_FILL)
>>> img.add_layer(background, 1)
>>> gimp.Display(img)
<display>
>>> gimp.displays_flush()
>>> pdb.gimp_context_pop()
>>> return
  File "<input>", line 1
SyntaxError: 'return' outside function

>>>
>>>
>>>
Jakoś nie wyskakuje mi z tej funkcji z powrotem do pętli, tworzy obrazek tak jak trzeba, ale tylko jeden z napisem "jeden". Ten pierwszy problem też pewnie ma jakieś znaczenie. Co tu trzeba poprawić?
To moje pierwsze kroki z Pythonem i pierwsze wrażenie jest takie, że jakiś sadysta wymyślił te wcięcia, gdzie jedna spacja za mało lub za dużo rozwala wszystko :-(
Już mi ten projekt chyba nie będzie potrzebny, ale z czystej ciekawości chcę to zrobić.


Zapisane
Ziomioslaw
Administrator

Reputacja: 46 Offline Offline

Płeć: Mężczyzna
GIMP: 2.10
JID: ziomioslaw@jabber.org
Licencja: Copyright
Wiadomości: 7 431
Galeria Użytkownika


Cyklista Apokalipsy


Zobacz profil
« Odpowiedz #8 : 26.01.2022, 18:56:05 »

Masz wcięcia nieprawidłowe, pół funkcji Ci zniknęło:

Cytuj
#!/usr/bin/env python
from gimpfu import *
import csv

with open('D:\GimpSkrypty\skrypt1.csv') as plik:
    readCSV = csv.reader (plik, delimiter=";")
    for wiersz in readCSV:
        nrwiersza=wiersz[0] # to bede uzywac do nadania nazwy pliku
        napis=wiersz[1] #to bede uzywac do stworzenia napisu
        hello_world(napis)


#http://www.efalk.org/Docs/Python/gimp-examples.html - stad wzialem i przerobilem poniasza funkcje:
def hello_world(napis):
    if font == 'Comic Sans MS':
        initstr = "Comic Sans? Are you sure?"

    img = gimp.Image(1, 1, RGB)
    pdb.gimp_context_push()
    gimp.set_foreground(125, 175, 188)
    layer = pdb.gimp_text_fontname(img, None, 0, 0, napis, 10, True, 100, PIXELS, "Tahoma")
    img.resize(layer.width, layer.height, 0, 0)
    background = gimp.Layer(img, "Background", layer.width, layer.height, RGB_IMAGE, 100, NORMAL_MODE)
    background.fill(BACKGROUND_FILL)
    img.add_layer(background, 1)
    gimp.Display(img)
    gimp.displays_flush()
    pdb.gimp_context_pop()
Zapisane
Gimpo-cienias
Nowicjusz

Reputacja: 0 Offline Offline

Wiadomości: 6
Galeria Użytkownika

Gimpo-cienias


Zobacz profil
« Odpowiedz #9 : 26.01.2022, 20:03:47 »

Dziękuję za pomoc :-)
Zapisane
Strony: [1]
DrukujPobierz PDF
Polskie Forum Użytkowników GIMP-aOgólne dyskusjePomocna dłońGIMP - pomoc (Moderator: be@)Wątek: Generowanie dużej ilości plików PNG z pliku TXT
Skocz do: