[Çözüldü]PSD dosyalarının ön izlenmesi

Başlatan emrebahis, 31 Ağustos 2010 - 18:10:20

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

emrebahis

Buradan devam etmek daha uygun olur sanırım.

Lucid 64bit kullanıyorum.

Bende benzer bir sorunu .psd uzantılı dosyalar için yaşıyorum. İşim gereği bana dışarıdan .psd dosyalar geliyor. Fakat ben bu dosyaları GIMP'de açana kadar önizlemelerini göremiyorum. Klasör değiştirdiğim zaman da önizlemeler kayboluyor ve yeniden GIMP ile açmam gerekiyor. Aynı sorun .xcf uzantılı dosyalar için de vardı fakat onu "gnome-xcf-thumbnailer" i kurararak halletim. Fakat ne yaptıysam .psd'ler olmadı. Yarım yamalak yabancı dilim ile aşağıdaki adreslerde yazılanları yaptım fakat gene bir sonuç yok. Gconf-editor ile baktığımda "Bu anahtarın şeması yok" diyor. Yardımcı olursanız sevinirim

Adresler:
https://bugs.launchpad.net/nautilus/+bug/287868
https://bugzilla.gnome.org/show_bug.cgi?id=551995

Şimdiden ilginize teşekkür ederim.

hitokiri

bu dosyaların boyutu nedir ?
boyutuyla ilgili bi sıkıntı olabilir sanırım,
gconftool-2 -g /apps/nautilus/preferences/thumbnail_limit
komutla byte olarak en büyük resim dosyası için sınınrı öğrenebilir sorun bu şekilde olabilirse belki bu limiti arttırmak
gconf-editor  /apps/nautilus/preferences/thumbnail_limit
işe yarıyabilir  :-\

emrebahis

Alıntı yapılan: hitokiri - 31 Ağustos 2010 - 18:30:05
bu dosyaların boyutu nedir ?
boyutuyla ilgili bi sıkıntı olabilir sanırım,
gconftool-2 -g /apps/nautilus/preferences/thumbnail_limit
komutla byte olarak en büyük resim dosyası için sınınrı öğrenebilir sorun bu şekilde olabilirse belki bu limiti arttırmak
gconf-editor  /apps/nautilus/preferences/thumbnail_limit
işe yarıyabilir  :-\

En büyük dosya boyu 100 Mb. civarı. Fakat küçüklerde de önizleme görünmüyor.

Sanırım sorun başka bir yerde. Sizin verdiğiniz komutun çıktısı aşağıdaki gibi:

~$ gconftool-2 -g /apps/nautilus/preferences/thumbnail_limit
104857600



canosayan

nautilus tercihlerinde önizleme boyutu seçeneği var. sanırım varsayılanı 10 mb kadar. aten düşününce 100 mb olan bir dosyanın önizlemesini oluşturmak çok faydalı değil gib.
Chmod bizim işimiz.

hitokiri

heim şöyle bi şey buldum
Alıntı Yaphttp://code.google.com/p/gdk-pixbuf-psd/downloads/list
burdaki tar uzantılı arşivi indirip açarak,
cd komutuyla açılan dizine geçip
make
komutunu uygulayınca
libpixbufloader-psd.so adında bi dosya derleniyor
bu dosyayıda kopyalıp
sudo nautilus '/usr/lib/gtk-2.0/2.10.0/loaders'
açılan dizine yapıştırmak belki işe yarıyabilir
psd dosya olmadığı için deniyemedim :)

emrebahis

Alıntı yapılan: canosayan - 01 Eylül 2010 - 17:22:20
nautilus tercihlerinde önizleme boyutu seçeneği var. sanırım varsayılanı 10 mb kadar. aten düşününce 100 mb olan bir dosyanın önizlemesini oluşturmak çok faydalı değil gib.

Her seferinde açmaya çalışmak daha büyük sıkıntı oluyor. Önizleme olunca, sadece yer değişirse tekrardan küçük resim oluşturması biraz sıkıcı oluyor, o kadar.

Alıntı yapılan: hitokiri - 01 Eylül 2010 - 17:38:44
heim şöyle bi şey buldum
Alıntı Yaphttp://code.google.com/p/gdk-pixbuf-psd/downloads/list
burdaki tar uzantılı arşivi indirip açarak,
cd komutuyla açılan dizine geçip
make
komutunu uygulayınca
libpixbufloader-psd.so adında bi dosya derleniyor
bu dosyayıda kopyalıp
sudo nautilus '/usr/lib/gtk-2.0/2.10.0/loaders'
açılan dizine yapıştırmak belki işe yarıyabilir
psd dosya olmadığı için deniyemedim :)

Teşekkür ederim. Birazdan deneyeceğim.

Derlenen dosyayı kopyaladıktan sonra gconf-editor'de herhangi bir değişiklik yapmam gerekecek mi?

Ayrıca belirtmek isterim .psd'yi GIMP kullanarak da yapabilirsiniz. GIMP oldukça güçlü bir program.

hitokiri

heim
yukardaki işlemlerden sonra birde
şu komutu uygulayınca gthumb ile açabildim ama önizleme olmadı yine birazdaha bakınayım :)
gdk-pixbuf-query-loaders /usr/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-psd.so | sudo tee /usr/lib/gtk-2.0/2.10.0/loader-files.d/gdk-pixbuf-psd.loaders

emrebahis

Sanırım bende eksik olan birşeyler var.

~/İndirilenler/gdk-pixbuf-psd-20081217$ make
gcc -Wall -std=c99 io-psd.c  -o libpixbufloader-psd.so \
`pkg-config --cflags gtk+-2.0` \
-shared -fpic -DGDK_PIXBUF_ENABLE_BACKEND
Package gtk+-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-2.0' found
io-psd.c:34:38: error: gdk-pixbuf/gdk-pixbuf-io.h: No such file or directory
io-psd.c:35:25: error: glib/gstdio.h: No such file or directory
io-psd.c:40: error: expected specifier-qualifier-list before 'guchar'
io-psd.c:86: error: expected specifier-qualifier-list before 'GdkPixbuf'
io-psd.c:116: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'read_uint16'
io-psd.c:122: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'read_uint32'
io-psd.c:134: error: expected ')' before '*' token
io-psd.c:156: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'feed_buffer'
io-psd.c:180: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'skip_block'
io-psd.c:212: warning: type defaults to 'int' in declaration of 'guchar'
io-psd.c:212: error: expected ';', ',' or ')' before '*' token
io-psd.c: In function 'reset_context_buffer':
io-psd.c:247: error: 'PsdContext' has no member named 'bytes_read'
io-psd.c:248: error: 'PsdContext' has no member named 'bytes_to_skip'
io-psd.c:249: error: 'PsdContext' has no member named 'bytes_to_skip_known'
io-psd.c:249: error: 'FALSE' undeclared (first use in this function)
io-psd.c:249: error: (Each undeclared identifier is reported only once
io-psd.c:249: error: for each function it appears in.)
io-psd.c: At top level:
io-psd.c:253: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'gdk_pixbuf__psd_image_begin_load'
io-psd.c:291: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'gdk_pixbuf__psd_image_stop_load'
io-psd.c:319: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'gdk_pixbuf__psd_image_load_increment'
io-psd.c:566: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
io-psd.c:573: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
make: *** [all] Hata 1

hitokiri

derlenmiş halini şurdan edinebilirsin ama ghtumb gösterse de veya eog önizleme kısmından şimdilik pek umutlu değiliim,,
http://www.mediafire.com/?dq0q864drezferx

emrebahis

#9
Alıntı yapılan: hitokiri - 01 Eylül 2010 - 19:22:54
derlenmiş halini şurdan edinebilirsin ama ghtumb gösterse de veya eog önizleme kısmından şimdilik pek umutlu değiliim,,
http://www.mediafire.com/?dq0q864drezferx

Teşekkür ederim. Aldım ve denedim eog ile açılıyor artık.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Eylül 2010 - 19:48:40



Acaba resimde görülen ünlem işareti ve yanındaki açıklama için yapılabilecek birşeyler var mıdır?

hitokiri

Alıntı Yap#!/usr/bin/env python
# Filename: psd-thumbnailer.py


import sys
from PIL import Image
outfile = "/tmp/res"
maxxy =  sys.argv[1]
size =  44,44
infile = maxxy
try:
   im = Image.open(infile)
   im.thumbnail(size, Image.ANTIALIAS)
   im.save(outfile, "PNG")
except Exception, err:
   print err
heim bu betik üzeirinden bi şey yapılabilir gibi bu haliyle
şu şekilde çalıştırmak gerek
uçbirimden,
/psd-thumbnailer.py dosya.psd
küüçük resmi /tmp atıcak bi ara etraflıca bakmak lazım muhtemelen bi kolay yolu vardır
image-psd için belki bi gconf ayarı falan https://bugs.launchpad.net/nautilus/+bug/287868 burdaki gibi ama tam anlamadım betik yaparım en olmadı seçilen dosyalrı seçilen dizine küç.ük resim olarak atar png olarak biraz kurtarmış oluruz .)

emrebahis

Söylediğin şekilde çalıştırdım ve tmp'nin içinde res isminde bir küçük resim oluşturdu. Eline sağlık.

Senden aldığım ilham ile elimdeki diğer betikleri uçbirimde çalıştırayım dedim.

https://bugzilla.gnome.org/show_bug.cgi?id=551995

Adresinden edindiğim ve  GIMP'i kullanan aşağıdaki önizleme betiğini denedim.


#!/usr/bin/env python

from gimpfu import *
import sys

# Get file name from command line
if sys.argv[1]:
    this_file = sys.argv[1]

def python_thumbnailer(this_file):
   
    # Strip of the "file:///" prefix
    if this_file.startswith('file:///'):
        this_file = this_file.replace('file:///', '/')
       
    img = ""
    try:
        img = pdb.gimp_file_load(this_file,this_file)
    except:
        # Oops - we couldn't load the file.  Cowardly bailing out!
        pdb.gimp_quit(0)
        sys.exit()
    try:
        pdb.gimp_file_save_thumbnail(img,this_file)
    except:
        # Uh-oh - we couldn't save.  Cowardly bailing out!
        pdb.gimp_quit(0)
        sys.exit()
    pdb.gimp_image_delete(img)
    pdb.gimp_quit(0)

register(
"python-fu-thumbnailer",
"Generating thumbnails",
"Generating thumbnails for Nautilus via Gimp",
"Eckhard M. Jaeger",
"Eckhard M. Jaeger",
"2007",
"<Toolbox>/Xtns/Thumbnail a file...",
"",
[
(PF_FILE, "this_file", "File", ""),
],
[],
python_thumbnailer)

main()


Bu betiği uçbirimde çalıştırınca aşağıdaki gibi bir hata verdi.

./gimp-thumbnailer.py xxxx.psd
Traceback (most recent call last):
  File "./gimp-thumbnailer.py", line 3, in <module>
    from gimpfu import *
ImportError: No module named gimpfu


Oysa gimpfu.py ve gimpfu.pyc /usr/lib/gimp/2.0/python klasörünün altında duruyor. Bu konularda çok bilgili değilim.

emrebahis

Aklıma şöyle bir şey geldi. Ama elimde olan diğer betiklere bakarak pek bir sonuca varamadım.

Yazdığın betik çalışıyor ve /tmp'nin içine bir png oluşturuyor.

Eğer bu ön izleme sisteminin nasıl çalıştığını bulabilirsek senin yazdığın bu betiği ./thumbnails'e yönlendirip ön izleme yapılabilir belki. Ama oradaki isimler sanırım rastgele oluşturuluyor. Bir de o küçük resim nasıl esas dosyaya ön izleme olarak atanıyor bilmek gerekir gibi geldi bana. Acaba bir yerlerle bir liste şeklinde mi tutuluyor?

emrebahis

Bugün şöyle bir şey denedim:

Bir KDE programı olan Gwenview'u yükledim. Gwenview içinde .psd'lerin ön izlemesi yapılıyor ve ./thumbnails'e kaydediliyor. Sonra Nautilus ile klasörü açınca söz konusu .psd'lerin ön izlemesi görünüyor.

Bu durumdan cesaret alarak, Sistem gözlemcisinden baktım. Gwenview, kio_thumbnail'ı kullanıyor ön izlemeleri oluşturmak için.

Acaba gconf-editor'u kullanarak kio_thumbnail'ı Nautilus'a nasıl adapte edebiliriz?

hitokiri

vala çok bakamadım ama şu şekilde denedim oldu gibi ;
bu dosyayı .gnome2/nautilus_script
dizinine taşı
çalıştırma hakkı ver sonra psd dosylarını seçip
sağ tık betikler psd.py
deyince küçük resimleri aynı dizin içine yerleştiricektir(psdthumb)aynı isime artı olarak şekilne png halini

#!/usr/bin/env python
# Filename: psd-thumbnailer.py


import sys,os,re
from PIL import Image
def infile(no):
file = sys.argv[no]
if file == "":
return False
else:
print file
return file
size =  44,44
def outfile(se):
grep=re.findall(".*?../", se)
for i in grep:
se=se.replace(i, "")
return se + "thumb"
i=0
while True:
i+=1
if  infile(i) :
im = Image.open(infile(i))
im.thumbnail(size, Image.ANTIALIAS)
im.save(infile(i)+(outfile(infile(i))), "PNG")
else:
break


emrebahis

Eline sağlık.

Bu betik çok iyi çalışıyor. Söz konusu olan .psd'lerin önizleme sorunu çözülene kadar yazdığın bu betik çok iyi bir yardımcı olacak.

Eğer bu konu ile ilgili herhangi bir gelişmeden haberdar olursak, bu başlık altında paylaşırsak sevinirim.

Tekrar teşekkür ederim.





hitokiri

Alıntı YapEline sağlık.
Sağol  @emrebahis ,
Umarım daha temelli  bi çözüm yolu yakın zamanda bulunur :)
böyle de bi yere kadar . )

hitokiri

#!/usr/bin/env python
# Filename: psd-thumbnailer.py
import sys,os,urllib,hashlib
from PIL import Image
home = os.environ["HOME"]
size = 80,80
for x in  sys.argv[1:]:
        im = Image.open(x)
        im.thumbnail(size, Image.ANTIALIAS)
        op = urllib.urlopen(x)  ;  fil = op.geturl()
        file = hashlib.md5(fil).hexdigest()
        thumb =home+"/.thumbnails/normal/"+file + ".png"
        im.save((thumb), "PNG")

ve nihayi sona yakın bir şey bu sefer direk thumb olarak değişiyor ama script dizininde düzgün çalışmadı gibi bende nedense direk dosya resim dosyaları şeklinde dene sendede script dizininde sonuç vermezse ,
başka bi şeye bakıyordum burası içinde çözüm gibi bi şey oldu :)

emrebahis

İlgin için teşekkür ederim.

En son yazdığın betiği denedim. Script dizinine koydum ve yeni oluşturduğum bir psd dosyasının üzerinde sağ tık ile çalıştırdım ve  /.thumbnails/normal klasöründe küçük resim oluştu fakat oluşturduğum dosyanın ön izlemesi olarak görünmedi.


hitokiri

dosya.py `find /dizin|grep psd`
Alıntı Yapşeklinde dene sendede script dizininde sonuç vermezse
veya böyle bi şey )
.gnome2/nautilus-scripts/psd.py ~/sdaaaaa.psd

emrebahis

Özür dilerim. işler yüzünden kafam biraz karışık tam anlayamamışım yazdıklarını.

Yazdığın betiği konsolda çalıştırdım ve klasörü yenileyince küçük resim göründü.   

emrebahis

Önceki mesaja mı ekleyeyim bilemedim...

Bugün bir şey fark ettim. Herhangi bir klasörün içindeki .psd dosyalarında sağ tık ile bu betiği çalıştırdığımda bir şey olmuyor fakat Masaüstündeki .psdlerde sağ tık ile çalıştırdıktan sonra Masaüstünü F5 ile yenilediğimde ön izlemeler görünüyor.

Aktarayım istedim.
---------------------------------

Bir ek daha yapayım;

Masaüstü klasörünün penceresini açtığımda da betik çalışmadı. Ama doğrudan Masaüstünde çalışıyor.

hitokiri

#22
heim güzel bulmuşsun dosyaya sağtık ta sadece dosya ismi geliyormuş dizin +/dosya olarak değiştirince düzeldi,
tabi değiştirince masaüstünde çalıştır bozuldu ,onuda bi şekilde hallettim  :)

Alıntı Yap#!/usr/bin/env python
# Filename: psd-thumbnailer.py
import sys,os,urllib,hashlib
from PIL import Image
home = os.environ["HOME"]
size = 80,80
for x in  sys.argv[1:]:           
        q = os.path.basename(x) 
        if len(q)   ==  len(x):
                x = os.environ["PWD"]+"/"+x   
        op = urllib.urlopen(x)  ;  fil = op.geturl()
        file = hashlib.md5(fil).hexdigest()           
        im = Image.open(x)
        im.thumbnail(size, Image.ANTIALIAS)   
        thumb =home+"/.thumbnails/normal/"+file + ".png"
        im.save((thumb), "PNG")

Sinir etti pwdyi hep home/kullanıcı olarak okuyor bu da >:(
ama inat değil mi,yaptım sonunda :P


#!/usr/bin/env python
# Filename: psd-thumbnailer.py
import sys,os,urllib,hashlib
from PIL import Image
size = 80,80
home = os.environ["HOME"]
x = os.environ['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS']
with open("/tmp/psd","w") as psd:
        psd.write(x)
def oku(no):
        dosya = open("/tmp/psd","r")
        for i in range(no):
                name = dosya.readline().strip('\n')
        dosya.close()
        if name == "":
                return False
        else:
                return name
i=0
while True:
        i+=1                 
        x= oku(i)               
        if not x:
                os.system("rm -rf /tmp/psd")
                break
        op = urllib.urlopen(x)  ;  fil = op.geturl()
        file = hashlib.md5(fil).hexdigest()         
        im = Image.open(x)
        im.thumbnail(size, Image.ANTIALIAS)   
        thumb =home+"/.thumbnails/normal/"+file + ".png"
        im.save((thumb), "PNG")



emrebahis

Eline sağlık.

Şimdi çalışıyor gibi ama fazla zorlamadım. Daha detaylı bir deneme yapıp yazacağım.

Bir fikir olarak ekleyeyim. Diyelim ki bu .psd'ler hepsi bir klasörün içinde. Bu betiği sağ tık ile dosyanın üzerinde değilde klasör üzerinde çalıştırsak daha mı az uğraşmış olurdun?

Çok fazla bilgim yok fakat  /tmp'nin içinde bir dosya açıp oraya konumu yazdırarak bulduğun çözüm oldukça etkileyici olmuş. Tebrik ederim.


hitokiri

Alıntı YapBir fikir olarak ekleyeyim. Diyelim ki bu .psd'ler hepsi bir klasörün içinde. Bu betiği sağ tık ile dosyanın üzerinde değilde klasör üzerinde çalıştırsak daha mı az uğraşmış olurdun?
yok yani şöyle oldu o da :)
Ama sorunun bununla bi ilgisi yoktu,
teşekkür ettim sende artık çözüldü diye etiketle şu başlığı =))
#!/usr/bin/env python
# Filename: psd-thumbnailer.py
import sys,os,urllib,hashlib,re
from PIL import Image
size = 80,80
home = os.environ["HOME"]
x = os.environ['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS']
with open("/tmp/psd","w") as psd:
        psd.write(x)
def oku(no):
        dosya = open("/tmp/psd","r")
        for i in range(no):
                name = dosya.readline().strip('\n')
        dosya.close()
        if name == "":
                return False
        else:
                return name
def ekle(fl):
        op = urllib.urlopen(fl)  ;  fil = op.geturl()
        file = hashlib.md5(fil).hexdigest()         
        im = Image.open(fl)
        im.thumbnail(size, Image.ANTIALIAS)   
        thumb =home+"/.thumbnails/normal/"+file + ".png"
        im.save((thumb), "PNG")
               
i=0
while True:
        i+=1                 
        x= oku(i)               
        if not x:
                os.system("rm -rf /tmp/psd")
                break
        if os.path.isdir(x):
                lis = []
                expr = re.compile(".psd")
                for y in os.listdir(x):
                        lis.append(x+"/"+y)
                        fl = filter(expr.search,lis)
                        if len(fl) >= 1:
                                ekle( fl[0] )
                                lis.pop( lis.index(fl[0]) )
        else:ekle(x)