2009-05-20 6 views
10

मैं PyQt4 के साथ एक पायथन स्क्रिप्ट से एक QImage ऑब्जेक्ट में एक जेपीईजी छवि का उपयोग करने की कोशिश कर रहा हूं।py2exe-compiled पायथन स्क्रिप्ट में QImage के लिए जेपीईजी समर्थन सक्षम करना?

स्क्रिप्ट स्वयं पूरी तरह से काम करती है, छवि लोड होती है और इसे छेड़छाड़ और प्रस्तुत किया जा सकता है और सभी। हालांकि, जब मैं py2exe के साथ इस स्क्रिप्ट को "संकलित" करने का प्रयास करता हूं, तो सबकुछ काम करता है लेकिन जेपीईजी छवि। इसे पीएनजी समकक्ष कार्यों के साथ बदलना, लेकिन चूंकि मेरा प्रोग्राम वेब से छवियों को डाउनलोड करता है, इसलिए वे हमेशा पीएनजी प्रारूप में नहीं होंगे और मैं उन्हें सभी लाइब्रेरी के साथ परिवर्तित नहीं कर सकता।

मुझे पता चला है कि अन्य छवि प्रारूपों के साथ QImage के लिए जेपीईजी छवि समर्थन \ qt \ plugins \ imageformats निर्देशिका में कुछ डीएलएल द्वारा प्रदान किया जाता है (उन्हें qjpeg4.dll और qjpeg4d.dll कहा जाता है)। मुझे लगता है कि मुझे अपने निष्पादन योग्य में किसी भी तरह उनका उपयोग करने की ज़रूरत है, लेकिन मुझे नहीं पता कि कैसे। मैंने बस उन्हें अपने exe निर्देशिका में कॉपी करने की कोशिश की है, कोई भाग्य नहीं। मैंने कोशिश की है, indicated here, उन फ़ाइलों को setup.py स्क्रिप्ट में data_files के रूप में शामिल करने के लिए, लेकिन कोई भाग्य नहीं है (ऐसा लगता है कि यह इन फ़ाइलों को exe की निर्देशिका में कॉपी कर रहा है, इसलिए यह उन्हें मैन्युअल रूप से कॉपी करने से कुछ भी नहीं बदलता है) ।

मुझे यकीन है कि जेपीईजी छवियों के साथ पीईक्यूटी का उपयोग करके वहां कुछ हद तक एप्लिकेशन हैं, वे इसे कैसे करते हैं? यह एक मामूली काम की तरह लग रहा था लेकिन मैं अब इस पर अटक गया हूँ।

इसके अलावा, मैं चाहता हूं कि मेरा ऐप क्रॉस-प्लेटफॉर्म हो (मैं पाइथन में और क्यों कोडिंग करूँगा?), मुझे आशा है कि मैं ऐसी पैकेजिंग समस्या में भाग नहीं पाऊंगा (यह केवल एक नहीं है) जब ओएस एक्स के लिए पैकेजिंग या लिनक्स। क्या मैं

उत्तर

12

एक ही मुद्दे के साथ चारों ओर ठोकर के घंटे के बाद, मैं समाधान है कि Windows Vista पर मेरे लिए काम किया साझा करना चाहते हैं :

C:\Python26\Lib\site-packages\PyQt4\plugins\imageformats 

मैं सिर्फ imageformats निर्देशिका सीधे मेरी जिले निर्देशिका में, गिरा qt.conf जाने वाला कोई भी संशोधन या ऐसा कुछ के बिना। मैंने कोशिश नहीं की है, लेकिन यह फोनोन के लिए भी काम कर सकता है।

+0

कुछ लोगों की टिप्पणी उत्तर में इनलाइन थी: मैंने इस समाधान का भी उपयोग किया। Win7 32/64, xp sp3 पेशेवर (32 बिट) पर इसका सही काम है। लेकिन, इसके XP SP2 (32 बिट) पर असफल, मैं XP SP3 और "प्रोसेस एक्सप्लोरर", XP SP2 द्वारा XP SP2 तुलना लापता .. \ imageformats \ *। Dll मैं पता नहीं हल करने के लिए है ... क्या किसी के पास समाधान है? – Macke

1

मुझे कबूल करना होगा कि मैंने कभी भी py2exe + pyqt संयोजन को सही नहीं पाया (और, py2exe क्रॉस-प्लेटफ़ॉर्म पैकेजिंग के साथ बिल्कुल मदद नहीं करता है)। PyInstaller बहुत बेहतर प्रतीत होता है - http://www.pyinstaller.org/ पर दस्तावेज़ पुराने हैं, लेकिन svn ट्रंक अधिक हाल ही में है। कुछ दस्तावेज़ हाल ही में पिकॉन इटालिया ट्रे कॉन्फ्रेंस - http://www.pycon.it/static/stuff/slides/distribuire-programmi-python-con-pyinstaller.pdf पर दिए गए स्लाइड में हैं - और, स्लाइड अंग्रेजी में हैं, और वर्तमान रखरखाव के ईमेल को शामिल करते हैं, इसलिए उन्हें मदद करनी चाहिए! (और, सभी लॉबी को मौजूदा रखरखाव को दस्तावेज़ों को अपडेट करने के लिए लॉबी करें ...! -)

+0

कोई भाग्य नहीं। मैंने PyInstaller के नवीनतम एसवीएन स्नैपशॉट को पकड़ लिया और यह मेरे प्रोग्राम को संकलित करने में सक्षम था, लेकिन इसमें समर्थित जेपीईजी समर्थन नहीं था और समर्थित छवियों के दावे के बावजूद कोई भी छविफॉर्मैट प्लगइन्स नहीं था कि वे पूरी तरह से समर्थित हैं। लेकिन क्यूटी के प्लगइन्स डीआईआर का पता लगाने के PyInstaller का तरीका टूटा हुआ है और एक अमान्य पथ लौटाया गया है, जिसे मैंने एक सिम्लिंक (या "जंक्शन" बनाकर तय किया है क्योंकि उन्हें एनटीएफएस पर बुलाया जाता है)। मैंने स्क्रिप्ट को एक और प्रयास दिया, और इस बार उसने क्यूटी 4 प्लगइन का पता लगाया और उन्हें एक्सई की निर्देशिका में कॉपी किया, लेकिन फिर से एक्सई चलाने पर, अभी भी कोई जेपीईजी समर्थन नहीं है! :( –

1

अपनी exe की निर्देशिका में qt.conf फ़ाइल जोड़ने का प्रयास करें, क्यूटी कहां बिनरी और प्लगइन्स ढूंढें।

कुछ सरल मामले में, जहां तुम सिर्फ सभी dll exe रूप में एक ही निर्देशिका में के डंप के लिए निम्न कार्य की तरह:

[Paths] 
Prefix = . 
Plugins = . 

अद्यतन: तो फिर अपने प्लग-इन-सामग्री (imageformat/sqldriver निर्देशिका आदि कॉपी) exe dir करने के लिए। मुझे नहीं लगता कि आप एक्सई के समान निर्देशिका से प्लगइन डीएलएस लोड कर सकते हैं। प्लगइन उपनिर्देशिकाओं के विवरण के लिए Qt plugin doc देखें। (या, 'प्लगइन्स =' को छोड़ दें और प्लगइन्स डीआईआर को exe dir पर कॉपी करें, इसलिए आपके पास /plugins/imageloaders/qjpeg4.dll है)।

+0

हाँ, मैंने भी कोशिश की, लेकिन अभी भी कुछ भी नहीं :(केवल पीएनजी छवियां लोड होती हैं। मुझे लगता है कि मुझे सभी छवियों को किसी अन्य मॉड्यूल/लाइब्रेरी के साथ परिवर्तित करने पर विचार करना चाहिए। किसी भी सुझाव के लिए मुझे किस का उपयोग करना चाहिए? –

+0

कैसे प्लगइन्स लाइन को हटाकर और qt-plugins निर्देशिका को आउटपुट डीआईआर में मैन्युअल रूप से कॉपी करना (इसलिए आपके पास /plugins/imageloaders/qjpeg4.dll है)। अगर आप pyqt के qt.conf का उपयोग करते हैं तो यह काम करता है? – Macke

+0

ओह। देविल आमतौर पर छवियों को लोड करने के लिए कई लोगों द्वारा उपयोग किया जाता है। मैंने इसे कभी भी कोशिश नहीं की है क्योंकि मैं हमेशा बड़े libs का उपयोग करता हूं। – Macke

0

व्यर्थ में सभी उपरोक्त समाधानों को आजमाने के बाद, मैंने अपनी छवियों को लोड करने के लिए पीआईएल का उपयोग करके समाप्त कर दिया। चूंकि मैं इन छवियों को ओपनजीएल क्यूटी विजेट में एक बनावट में परिवर्तित करना चाहता था, इसलिए परिणाम वही था जो मैं क्यूटी या पीआईएल का उपयोग कर छवि लोड करता हूं। फिर भी, मुझे परेशान है कि जेपीईजी लोड करने जैसी मूलभूत चीज एक जीयूआई लाइब्रेरी में इतनी जटिल है जितनी प्रसिद्ध और क्यूटी के रूप में व्यापक रूप से उपयोग की जाती है।

0

मुझे एक ही समस्या थी। इस का उपयोग करते हुए यह निश्चित: http://mail.python.org/pipermail/python-list/2008-June/669374.html

  1. कॉपी क्यूटी निर्देशिका के लिए प्लग-इन: $ YOUR_DIST_PATH/PyQt4/plugins;
  2. अपनी dist निर्देशिका में qt.conf कॉपी करें;
  3. qt.conf संपादित करें, उपसर्ग को बदलें।/ PyQt4
+0

मैंने कोशिश की, व्यर्थ में :(मुझे लगता है कि मैं यहाँ कुछ गलत कर रहा हूं, लेकिन जो भी हो, मेरा प्रोग्राम काम करता है .. अब के लिए। –

1

एटियेन - टिप के लिए धन्यवाद। अधिक पढ़ने और परीक्षण-और-त्रुटि के बाद, मैं एक ही निष्कर्ष पर पहुंचा: पीआईएल का उपयोग एक py2app- जेनरेट किए गए ऐप में jpegs दिखाने के लिए करें।

http://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-seriously-i-dont-know-what-to-do-with-you-when-youre-like-this/

क्या मुझे लगता है कि py2exe/Windows के लिए प्रस्तावित समाधान जरूरी py2app को/OSX लागू नहीं है है।

1

मैं ओएसएक्स तेंदुए पर हूं। मान लीजिए कि आपके पास MyApp.app एप्लिकेशन है।

  • MyApp.app/Contents/resources/ में qt.conf में
    MyApp.app/Contents/plugins/imageformats/
  • इस रखो में पुस्तकालयों libqjpeg.dylib और libqgif.dylib रखो:

    [Paths] 
    Prefix = . 
    Binaries = . 
    

मेरी मशीन (तेंदुआ) इस काम करता है पर।

+0

यह वास्तविक अच्छी तरह से काम किया। धन्यवाद! – EightyEight

0

विंडोज़ पर, सुझाए गए समाधान पूरी तरह से काम करते हैं।

हालांकि, ओएसएक्स पर यह ऊपर दिए गए निर्देशों के साथ भी काम नहीं कर सकता है।

प्रश्न यह है: libqjpeg.dylib और libqgif.dylib फ़ाइलें /Developer/Applications/Qt/plugins/imageformats/ निर्देशिका में स्थित हैं, और यदि आपने QQ को स्थापित किया है, न केवल PyQt। ये फाइलें मेरे लिए काम नहीं करती हैं।

PyQt वितरण में

, मैं फ़ाइलों libqjpeg.bundle और /opt/local/libexec/qt4-mac/plugins/imageformats/ में libqgif.bundle देखते हैं, लेकिन इन पुस्तकालयों नहीं हैं, और btw मैं उनकी सामग्री या तो नहीं खोल सकता, भले ही वे .bundle एक्सटेंशन मौजूद है। इन फ़ाइलों का उपयोग करने के बजाय या तो काम नहीं करता है।

मुझे यह जानकर उत्सुकता है कि आपने ओएसएक्स पर काम करने के लिए क्या किया है। मैंने this guide के बाद पीईक्यूटी स्थापित किया है। py2exe द्वारा उत्पन्न का उपयोग कर python2.6

कॉपी निम्न निर्देशिका अपने जिले निर्देशिका में:

0

मेरे लिए, समस्या को निष्पादन योग्य की निर्देशिका के लिए "qt.conf" की प्रतिलिपि बनाने का हल किया गया था।

आप "qt.conf" में ... \ PythonXX \ Lib \ site-packages \ PyQt4 \ qt.conf पा सकते हैं।

सहायता के लिए धन्यवाद।

+1

हाय, बस एक सुधार ... जब मैं "qt.conf" फ़ाइल और फ़ोल्डर "imageformats" की प्रतिलिपि बनाता हूं तो समस्या हल हो गई थी। आप "... \ PythonXX \ Lib \ site-packages \ PyQt4 \ plugins" :-) धन्यवाद में फ़ोल्डर पा सकते हैं। –

0

उपर्युक्त सबकुछ मेरे लिए असफल रहा जब तक मुझे एहसास हुआ कि मैं बंडलिंग 0ex38 (यानी, मेरे पास setupup में "bundle_files": 2 विकल्प था।मैंने इसे bundle_files = 2 में बदल दिया, और अब यह बहुत अच्छा काम करता है।

उपर्युक्त समाधान ठीक हैं। विशेष रूप से, मैंने बस अपने setup.py: डेटा = [("छवि प्रारूप", glob.glob ("सी: \ Python26 \ Lib \ site-packages \ PyQt4 \ plugins \ imageformats * .dll") में निम्न पंक्ति को जोड़ा है) ]

(निश्चित रूप से अन्य फ़ाइलों के अलावा)।

फिर, छवि लोड DLLs, MY_EXE_DIR/imageformats

मैं इस काम करने के लिए एक qt.conf जरूरत नहीं थी में हैं हालांकि मैं आप इसका इस्तेमाल कर सकता है आप अपने निर्देशिका वृक्ष रखना चाहते हैं यकीन कम अव्यवस्थित

0

bundle_files का उपयोग करके, py2exe'd स्क्रिप्ट के साथ जेपीईजी प्लगइन का उपयोग करना संभव है। आप इस ठीक से काम करने के लिए दो बातें व्यवस्था करने की जरूरत: py2exe के उत्पादन निर्देशिका के लिए

  1. कॉपी PyQt4/plugins/imageformats (डिफ़ॉल्ट: dist)

    आप केवल वास्तव में प्रारूपों आप कॉपी करना है जरुरत।

  2. जब bundle_files विकल्प आपको pyexe के लिए --dll-excludes विकल्प का उपयोग कर zipfile से क्यूटी dll फ़ाइलों execlude की जरूरत का उपयोग करें।

    आपको अभी भी data_files विकल्प का उपयोग कर आउटपुट निर्देशिका में Qt DLLs को कॉपी करना होगा (जैसे )।

0

प्रश्न के लिए आपके सहायक उत्तर के लिए धन्यवाद! मैंने आपके जैसा ही समस्या का सामना किया है और कोई समाधान मदद नहीं कर सकता है। उम्मीद है कि, मैं वीसीएस का उपयोग कर रहा था और पाया कि मेरे ऐप के पुराने संस्करण ने जेपीईजी छवियों को सही तरीके से लोड किया है और नए संस्करणों ने इसे रोकना बंद कर दिया है। मैंने PySide v1.2.2 का उपयोग करके इस बग को पकड़ा।

लाइब्रेरी लोडिंग को सक्षम करने के लिए, मैंने उसी समाधान का उपयोग किया जैसे @ मैके ने किया (यानी qt.conf जोड़ा और संपादित किया)।

मेरे qt.conf अगले था:

[Paths] 
Binaries = . 
Plugins = qtplugins 

C:\Python27\Lib\site-packages\PySide\plugins directoryqtplugins निर्देशिका में प्रतिलिपि गया था, इसलिए मैं अगले निर्देशिका था:

qtplugins\accessible 
qtplugins\codecs 
qtplugins\graphicssystems 
qtplugins\iconengines 
qtplugins\imageformats 

मैं अगले कोड था:

class NotesCalendar(QtGui.QCalendarWidget): 
    note_icon = QtGui.QImage("res/16note.png") 

बढ़ते वर्ग चर NotesCalendar.note_icon निर्माता के लिए समस्या हल हो और क्यूटी अपने पुस्तकालयों सही ढंग से लोड हो रहा है शुरू कर दिया। लगता है कि कक्षा चर परिवर्तक कुछ आंतरिक PySide सामान बाधित।

यह विंडोज पर कोई समस्या नहीं है।सही qt.conf और नकल plugins निर्देशिका निर्दिष्ट py2exe + PySide निर्माण में जेपीईजी समर्थन सक्षम करने के लिए पर्याप्त है। बेशक, आपको अपने कोड में कोई समस्या नहीं होनी चाहिए।

मुझे आशा है कि यह किसी दिन एक दिन बचाएगा! ;)

संबंधित मुद्दे