Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Multimedia ja grafiikka => Aiheen aloitti: 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.
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
-
Ahaa.
-
Ahaa.
???
-
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.
-
Nyt pitas näkyä.
-
Nyt pitas näkyä.
Juu hyvin toimii.
-
Hätätapauksessa voisi kokeilla Pythonilla (versiot 2.x) jotenkin näin, ei minusta kauhean helppo tehtävä:
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:
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.
-
Miten tälläinen pyython-koodi suoritetaan ??
Näin antaa virhettä.
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?
-
Paketti lienee python-imaging
(http://pp.kpnet.fi/jhii/galerio/pics/picpy025.png)
Voit kokeilla sen olemassaoloa kirjoittamalla komentotulkkiin (vahvennetut kohdat):
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:
#!/usr/bin/python
tai
#!/usr/bin/env python
riippuen 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:
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
-
Kiitos snifi näistä.
Nyt olen tässä vaiheessa:
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?
-
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:
rm transparent001.png
rm transparent002.png
rm transparent003.png
siltä varalta, että haluat tehdä muita toimenpiteitä tiedostoille komentotulkin kautta.
-
Nyt toimii.
Lähti n.2500 kpl turhaan ladattavaa kuvaa pois.
Kiitti avusta.