„Igazolófüzetek feldolgozása” változatai közötti eltérés
| (2 közbenső módosítás ugyanattól a szerkesztőtől nincs mutatva) | |||
| 44. sor: | 44. sor: | ||
Ez a ciklus lesz az alapja az összes scriptünknek. | Ez a ciklus lesz az alapja az összes scriptünknek. | ||
| + | Mivel így még nem túl hasznos, készítsünk egy függvényt, ami valóban csinál is valamit: | ||
| + | def resize (filename) : | ||
| + | basewidth = 1500 | ||
| + | img = Image.open(filename) | ||
| + | wpercent = (basewidth/float(img.size[0])) | ||
| + | hsize = int((float(img.size[1])*float(wpercent))) | ||
| + | img = img.resize((basewidth,hsize), Image.Resampling.LANCZOS) | ||
| + | img.save(filename) | ||
| + | |||
| + | A függvény felépítése a következő: az első sorban jelezzük, hogy egy függvény definíciót készítünk, aminek a neve resize, és egyetlen egy paramétert vár, ami a filename változóba kerül. A következő sorban megadjuk a kívánt szélességet. Ezután a megnyitjuk a filename változón lévő elérési úton lévő képet, és beolvassuk az img nevű változóba. Ezután megnézzük, hogy a kívánt szélesség hány százaléka az eredeti kép szélességének, és ez alapján állítjuk be a magasságot, hogy a képarány ne torzuljon. | ||
| + | img = img.resize((basewidth,hsize), Image.Resampling.LANCZOS) | ||
| + | Ebben a sorban végezzük el az átméretezést, és az utolsó sorban elmentjük az eredeti kép helyére. | ||
| + | Tehát a teljes programunk így fog kinézni: | ||
| + | from PIL import Image,ImageOps | ||
| + | import numpy as np | ||
| + | import os | ||
| + | |||
| + | directory = '.' | ||
| + | |||
| + | def resize (filename) : | ||
| + | basewidth = 1500 | ||
| + | img = Image.open(filename) | ||
| + | wpercent = (basewidth/float(img.size[0])) | ||
| + | hsize = int((float(img.size[1])*float(wpercent))) | ||
| + | img = img.resize((basewidth,hsize), Image.Resampling.LANCZOS) | ||
| + | img.save(filename) | ||
| + | |||
| + | for filename in os.listdir(directory): | ||
| + | |||
| + | if filename.endswith(".jpg"): | ||
| + | print(os.path.join(directory, filename)) | ||
| + | print("Átméretezés") | ||
| + | resize(filename) | ||
| + | continue | ||
| + | else: | ||
| + | continue | ||
| + | |||
| + | |||
| + | Ezt másold ki, mentsd el egy képeket tartalmazó könyvtárban, majd nyiss ott egy parancssort, és futtasd a python3 resize.py parancsot. Ha minden jól ment, akkor az összes képed 1500 pixel széles lett. | ||
| + | from PIL import Image,ImageOps | ||
| + | Ez a sor importálja a képmanipuláló modult. | ||
| + | A numpy csomagot most ebben apéldában nem használjuk, de később kell majd, így könnyebb lesz innen kimásolni. | ||
| + | Látható a scriptben, hogy a függvény meghívása a könyvtár bejárós ciklusba került: | ||
| + | print("Átméretezés") | ||
| + | resize(filename) | ||
| + | Ezt fogjuk minden függvényél alkalmazni, tehát a ciklus törzsében csak a meghívni kívánt függvényt kell átírnunk, tehát pl, ha az átlátszóságot beállító függvényünknek a transparent nevet adjuk, akkor ezt írjuk a ciklustörzsbe: | ||
| + | print("Átlátszóság beállítása") | ||
| + | transparent(filename) | ||
| + | =Függvények= | ||
| + | ==Átméretezés== | ||
| + | def resize (filename) : | ||
| + | basewidth = 1500 | ||
| + | img = Image.open(filename) | ||
| + | wpercent = (basewidth/float(img.size[0])) | ||
| + | hsize = int((float(img.size[1])*float(wpercent))) | ||
| + | img = img.resize((basewidth,hsize), Image.Resampling.LANCZOS) | ||
| + | img.save(filename) | ||
| + | Működését kicsit feljebb már ismertettem | ||
| + | ==Konvertálás png képre== | ||
| + | def convert_to_png(filename) : | ||
| + | im = Image.open(filename) | ||
| + | name=os.path.splitext(filename)[0]+'.png' | ||
| + | rgb_im = im.convert('RGB') | ||
| + | rgb_im.save(name) | ||
| + | A jpg képek nem kezelik az átlátszóságot, ezért png formátumba kell őket használnunk. | ||
| + | Figyelj oda, ha png képekkel teli könyvtárban akarsz futtatni scriptet, akkor a könyvtár bejárós ciklusban át kell írnod a kiterjesztés figyelését: | ||
| + | for filename in os.listdir(directory): | ||
| + | |||
| + | if filename.endswith(".png"): | ||
| + | print(os.path.join(directory, filename)) | ||
| + | #és ide jön a meghívni kívánt függvény | ||
| + | continue | ||
| + | else: | ||
| + | continue | ||
A lap jelenlegi, 2023. február 3., 12:54-kori változata
A bescannelt igazolófüzetek feldolgozásakor sokszor kell ugyanazokat a feladatokat elvégezni, például átméretezés, konvertálás, átlátszóság beállítása, stb. Ezek a feladatok nagyon jól automatizálhatóak, így sok időt lehet megsórolni. A kép manipulációkhoz Python-ra, és annak egy kiegészítőjére, a Pillow-ra lesz szükségünk.
Tartalomjegyzék
Telepítés[szerkesztés]
Töltsük le, és telepítsük az operációs rendszerünknek megfelelő Python verziót. A windowsos változatokat itt találjuk: Python. Ha megvan, akkor telepítsük a Pillow csomagot. Ehhez indítsd el a parancssort a gépeden, és írd be a következőt:
python3 -m pip install --upgrade pip python3 -m pip install --upgrade Pillow
Python scriptek futtatása[szerkesztés]
A scriptjeink sima szövegfájlok lesznek, bármelyik egyszerű szövegszerkesztővel szerkeszthetők (Notepad, Notepad++ igen, ms word nem), vagy használható IDE is hozzá. Fontos tudni, hogy Python esetében az indentálás, azaz a sorok behúzása dönti el, hogy a sor melyik kódblokkhoz tartozik, nem a kapcsos zárójelet használják, mint sok más programnyelv esetén. Scriptjeinket futtatni parancssorból tudjuk
python3 ez_a_scriptem.py
paranccsal. Rövid összefoglalót itt találsz: [1]
A scriptek felépítése[szerkesztés]
Minden programunk hasonlóan fog felépülni: betöltjük a szükséges modulokat, meghatározzuk, hogy mit kell csinálni egy-egy képpel, majd végigjárjuk a könyvtárat, és feldolgozzuk a képeket. Példa:
import os
directory = '.'
for filename in os.listdir(directory):
if filename.endswith(".jpg"):
print(os.path.join(directory, filename))
continue
else:
continue
Magyarázat:
import os
Betöltjük az os nevezetű modult. Ez egy interfészt biztosít az operációs rendszer funkcióihoz, mi a könyvtárban lévő fájlok meghatározására használjuk majd.
directory = '.'
Meghatározzuk a munkakönyvtárunkat, ami megegyezik azzal a könyvtárral, ahol a script fut.
for filename in os.listdir(directory):
if filename.endswith(".jpg"):
print(os.path.join(directory, filename))
continue
else:
continue
Kilistázzuk az adott könyvtár állományait, és egy ciklusban egyesével végigmegyünk rajta. Az éppen aktuállis állomány nevét a filename változóban tároljuk. Következő sorban megvizsgáljuk a filename változót, és ha jpg-re végződik akkor kiíratjuk az elérési útvonalát.
Ez a ciklus lesz az alapja az összes scriptünknek. Mivel így még nem túl hasznos, készítsünk egy függvényt, ami valóban csinál is valamit:
def resize (filename) : basewidth = 1500 img = Image.open(filename) wpercent = (basewidth/float(img.size[0])) hsize = int((float(img.size[1])*float(wpercent))) img = img.resize((basewidth,hsize), Image.Resampling.LANCZOS) img.save(filename)
A függvény felépítése a következő: az első sorban jelezzük, hogy egy függvény definíciót készítünk, aminek a neve resize, és egyetlen egy paramétert vár, ami a filename változóba kerül. A következő sorban megadjuk a kívánt szélességet. Ezután a megnyitjuk a filename változón lévő elérési úton lévő képet, és beolvassuk az img nevű változóba. Ezután megnézzük, hogy a kívánt szélesség hány százaléka az eredeti kép szélességének, és ez alapján állítjuk be a magasságot, hogy a képarány ne torzuljon.
img = img.resize((basewidth,hsize), Image.Resampling.LANCZOS)
Ebben a sorban végezzük el az átméretezést, és az utolsó sorban elmentjük az eredeti kép helyére. Tehát a teljes programunk így fog kinézni:
from PIL import Image,ImageOps
import numpy as np
import os
directory = '.'
def resize (filename) :
basewidth = 1500
img = Image.open(filename)
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), Image.Resampling.LANCZOS)
img.save(filename)
for filename in os.listdir(directory):
if filename.endswith(".jpg"):
print(os.path.join(directory, filename))
print("Átméretezés")
resize(filename)
continue
else:
continue
Ezt másold ki, mentsd el egy képeket tartalmazó könyvtárban, majd nyiss ott egy parancssort, és futtasd a python3 resize.py parancsot. Ha minden jól ment, akkor az összes képed 1500 pixel széles lett.
from PIL import Image,ImageOps
Ez a sor importálja a képmanipuláló modult. A numpy csomagot most ebben apéldában nem használjuk, de később kell majd, így könnyebb lesz innen kimásolni. Látható a scriptben, hogy a függvény meghívása a könyvtár bejárós ciklusba került:
print("Átméretezés")
resize(filename)
Ezt fogjuk minden függvényél alkalmazni, tehát a ciklus törzsében csak a meghívni kívánt függvényt kell átírnunk, tehát pl, ha az átlátszóságot beállító függvényünknek a transparent nevet adjuk, akkor ezt írjuk a ciklustörzsbe:
print("Átlátszóság beállítása")
transparent(filename)
Függvények[szerkesztés]
Átméretezés[szerkesztés]
def resize (filename) :
basewidth = 1500
img = Image.open(filename)
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), Image.Resampling.LANCZOS)
img.save(filename)
Működését kicsit feljebb már ismertettem
Konvertálás png képre[szerkesztés]
def convert_to_png(filename) :
im = Image.open(filename)
name=os.path.splitext(filename)[0]+'.png'
rgb_im = im.convert('RGB')
rgb_im.save(name)
A jpg képek nem kezelik az átlátszóságot, ezért png formátumba kell őket használnunk. Figyelj oda, ha png képekkel teli könyvtárban akarsz futtatni scriptet, akkor a könyvtár bejárós ciklusban át kell írnod a kiterjesztés figyelését:
for filename in os.listdir(directory):
if filename.endswith(".png"):
print(os.path.join(directory, filename))
#és ide jön a meghívni kívánt függvény
continue
else:
continue