Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Multimedia ja grafiikka => Aiheen aloitti: JJK - 21.12.09 - klo:15.15

Otsikko: Imagemagick -crop[Ratkaistu]
Kirjoitti: JJK - 21.12.09 - klo:15.15
Pilkon png-kuvia Imagemagick:llä. Ongelma on tyhjät(tansparent) kuvat joissa ei ole väri pikseleitä.
Mitenkähän voisin poistaa ne tai pilkkoa niin ettei niitä tulisi?

Tässä Imagemagick:n esim.
Koodia: [Valitse]
 convert rose: -crop 20x20 -set filename:tile "%[fx:page.x/20+1]_%[fx:page.y/20+1]" +repage +adjoin "rose_tile_%[filename:tile].gif"
edit: muokattu teksti näkyviin
Otsikko: Vs: Imagemagick -crop
Kirjoitti: mikko_h - 21.12.09 - klo:15.52
Ahaa.
Otsikko: Vs: Imagemagick -crop
Kirjoitti: JJK - 22.12.09 - klo:07.41
Ahaa.
???
Otsikko: Vs: Imagemagick -crop
Kirjoitti: Tha-Fox - 22.12.09 - klo:15.13
Toisin sanoen ekan viestin tekstisi on salaikirjoitusmoodissa (http://forum.ubuntu-fi.org/index.php?topic=30977.0). Eli ei näy ainakaan mulle, mitä sitten oletkin ekaan viestiisi kirjoittanut.
Otsikko: Vs: Imagemagick -crop
Kirjoitti: JJK - 22.12.09 - klo:22.56
Nyt pitas näkyä.
Otsikko: Vs: Imagemagick -crop
Kirjoitti: Tomin - 22.12.09 - klo:23.55
Nyt pitas näkyä.
Juu hyvin toimii.
Otsikko: Vs: Imagemagick -crop
Kirjoitti: snifi - 25.12.09 - klo:00.56
Hätätapauksessa voisi kokeilla Pythonilla (versiot 2.x) jotenkin näin, ei minusta kauhean helppo tehtävä:

Koodia: [Valitse]
from PIL import Image
filenames=("transparent.png","nontransparent.png")

for fname in filenames:
  img=Image.open(fname)
  im=img.load()
  xmax,ymax=img.size
  contains_information=False
  for x in range(xmax):
    for y in range(ymax):
      t=im[x,y]
      if t!=(0,0,0,0): contains_information= True
  print "Filename:", fname
  print "Size in px:", img.size
  print "Contains information: ", contains_information
  if not contains_information: print "This file is about to be deleted!"
  print "-"*30

Kokeilin kahteen Gimpillä tekemääni kuvaan, joista ensimmäinen läpinäkyvä, jälkimmäiseen piirrettynä epämääräisiä viivoja:
Koodia: [Valitse]
Filename: transparent.png
Size in px: (420, 300)
Contains information:  False
This file is about to be deleted!
------------------------------
Filename: nontransparent.png
Size in px: (420, 300)
Contains information:  True
------------------------------

En tiedä toimiiko menetelmä yleispätevästi.
Otsikko: Vs: Imagemagick -crop
Kirjoitti: JJK - 25.12.09 - klo:08.35
Miten tälläinen pyython-koodi suoritetaan ??

Näin antaa virhettä.
Koodia: [Valitse]
xx@pc:~/test$ ./test.py
from: can't read /var/mail/PIL
./test.py: line 5: syntax error near unexpected token `img=Image.open'
./test.py: line 5: `  img=Image.open(fname)'

Jos kommentoi eka("from PIL import Image") rivin pois niin virheestä jää vain rivi "from: can't read /var/mail/PIL" pois.

Vai tartteeko perus Ubuntuun asentaa jotain paketteja, että tämä toimis?
Otsikko: Vs: Imagemagick -crop
Kirjoitti: snifi - 25.12.09 - klo:13.55
Paketti lienee python-imaging
(http://pp.kpnet.fi/jhii/galerio/pics/picpy025.png)

Voit kokeilla sen olemassaoloa kirjoittamalla komentotulkkiin (vahvennetut kohdat):
Lainaus
user@home:~$ python
Python 2.5.1 (r251:54863, Jul 31 2008, 23:17:43)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>>
[Ctrl-D]

Python-ohjelmat suoritetaan käytännössä komennolla python skripti.py

Vaihtoehtoisesti voit lisätä skriptin ensimmäiselle riville:
Koodia: [Valitse]
#!/usr/bin/pythontai
Koodia: [Valitse]
#!/usr/bin/env pythonriippuen miten polut ja ympäristömuuttujat on koneessasi asennettu. Lisäksi täytyy lisätä ruksi ohjelman suoritusoikeuksiin. Sen jälkeen voit kutsua ohjelmaa suoraan ./skripti.py, tai jättää jopa tiedostopäätteen pois.

Tarvitset ehkä myös rutiinit hakemiston läpikäyntiin, en nyt jaksa kokeilla miten se tässä tapauksessa menisi, vaan heitän tähän pätkän toisesta ohjelmasta, jossa sama tehdään eri tarkoituksessa:
Koodia: [Valitse]
import os, sys
import re

# esim muuttamalla: rexp = ".*png$" lapikay png-paatteiset tiedostot:
rexp = ".*" # all files
p = re.compile(rexp)

t = []
for root, dirs, files in os.walk('.'): # current directory
  for f in files:
    filename = "%s%s%s" % (root, os.sep, f)
    if p.match(filename) and os.stat(filename)[6] > 0:
      t.append(filename)

for f in t:
  print "# %s" % f
Otsikko: Vs: Imagemagick -crop
Kirjoitti: JJK - 25.12.09 - klo:22.48
Kiitos snifi näistä.

Nyt olen tässä vaiheessa:
Koodia: [Valitse]
import os, sys
import re

from PIL import Image

rexp = ".*png$"
p = re.compile(rexp)

t = []
for root, dirs, files in os.walk('.'):
  for fname in files:
    filename = "%s%s%s" % (root, os.sep, fname)
    if p.match(filename) and os.stat(filename)[6] > 0:
      img=Image.open(filename)
      im=img.load()
      xmax,ymax=img.size
      contains_information=False
      for x in range(xmax):
        for y in range(ymax):
          t=im[x,y]
          if t!=(0,0,0,0): contains_information= True
      if not contains_information: print "Filename:", filename , "This file is about to be deleted!"

Mutta en tiedä enkä löydä mistään miten poistan tiedoston tai suoritan poisto komennon Pythonilla?
Otsikko: Vs: Imagemagick -crop
Kirjoitti: snifi - 26.12.09 - klo:00.09
Tiedoston poisto on
os.remove(filename)
http://docs.python.org/library/os.html#os.remove (http://docs.python.org/library/os.html#os.remove)

Toisaalta voit myös poistaa tai kommentoida pois kaikki print-lauseet, ja tulostaa ainoastaan luettelon tiedostoista .sh-tiedostoon:
Koodia: [Valitse]
rm transparent001.png
rm transparent002.png
rm transparent003.png
siltä varalta, että haluat tehdä muita toimenpiteitä tiedostoille komentotulkin kautta.
Otsikko: Vs: Imagemagick -crop[Ratkaistu]
Kirjoitti: JJK - 26.12.09 - klo:15.04
Nyt toimii.
Lähti n.2500 kpl  turhaan ladattavaa kuvaa pois.

Kiitti avusta.