„Igazolófüzetek feldolgozása” változatai közötti eltérés

Innen: heyjoe wiki
Ugrás a navigációhoz Ugrás a kereséshez
 
(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.

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