2010-09-15 21 views
6

मेरे पास करने के लिए थंबनेलिंग की एक बड़ी मात्रा है। वर्तमान में, मैं ImageMagick का उपयोग कर रहा हूं, लेकिन यह बहुत अक्षम है (यह बहुत धीमा है, बहुत अधिक CPU/स्मृति आदि का उपयोग करता है)।थंबनेल बनाने के लिए सबसे कुशल तरीका?

मैंने ग्राफिक्स मैगिक का मूल्यांकन करना शुरू कर दिया है, जिसे मुझे "वाह" परिणाम प्राप्त होने की उम्मीद है। मैं उन्हें नहीं मिला था। किसी ने मेरे बेंचमार्क स्क्रिप्ट का शीघ्रता से अवलोकन ले जा सकते हैं (करता है सरल गति और केवल फ़ाइल आकार तुलना, कोई CPU और स्मृति जाँच करता है अभी तक):

'gm convert' took 75.0039 seconds to execute 10 iteration(s). 
'convert' took 83.1421 seconds to execute 10 iteration(s). 
Average filesize of gm convert: 144,588 bytes. 
Average filesize of convert: 81,194 bytes. 
:

http://pastebin.com/2gP7Eaxc

यहां एक नमूना उत्पादन मुझे मिल गया है

ग्राफिक्स मैगिक इतना तेज़ नहीं है - और आउटपुट फ़ाइल आकार इमेजमैजिक से अधिक महत्वपूर्ण हैं।

+3

क्या यह एक बड़े वन-ऑफ बैच के लिए है, या आप इसे रीयल-टाइम वेब ऐप या कुछ समान में एकीकृत करने की कोशिश कर रहे हैं? – dkamins

+0

यह एक-ऑफ नहीं है। मैं हर समय थंबनेल पर चीजें प्राप्त करूँगा। – StackOverflowNewbie

+0

* क्या * फ़ाइल प्रकार आप थंबनेल चाहते हैं? पीडीएफ? –

उत्तर

1

मैं आप जीडी 2 का उपयोग करना चाहता हूं, इस फ़ंक्शन का उपयोग करने का प्रयास करें। यह उपयोग करने के लिए बहुत आसान है:

function scaleImage($source, $max_width, $max_height, $destination) { 
    list($width, $height) = getimagesize($source); 
    if ($width > 150 || $height > 150) { 
    $ratioh = $max_height/$height; 
    $ratiow = $max_width/$width; 
    $ratio = min($ratioh, $ratiow); 
    // New dimensions 
    $newwidth = intval($ratio * $width); 
    $newheight = intval($ratio * $height); 

    $newImage = imagecreatetruecolor($newwidth, $newheight); 

    $exts = array("gif", "jpg", "jpeg", "png"); 
    $pathInfo = pathinfo($source); 
    $ext = trim(strtolower($pathInfo["extension"])); 

    $sourceImage = null; 

    // Generate source image depending on file type 
    switch ($ext) { 
     case "jpg": 
     case "jpeg": 
     $sourceImage = imagecreatefromjpeg($source); 
     break; 
     case "gif": 
     $sourceImage = imagecreatefromgif($source); 
     break; 
     case "png": 
     $sourceImage = imagecreatefrompng($source); 
     break; 
    } 

    imagecopyresampled($newImage, $sourceImage, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

    // Output file depending on type 
    switch ($ext) { 
     case "jpg": 
     case "jpeg": 
     imagejpeg($newImage, $destination); 
     break; 
     case "gif": 
     imagegif($newImage, $destination); 
     break; 
     case "png": 
     imagepng($newImage, $destination); 
     break; 
    } 
    } 
} 
+0

मैं पिक्सेल रिज़ॉल्यूशन, उपयोग करने के लिए संपीड़न आदि कैसे निर्दिष्ट करूं? – StackOverflowNewbie

+0

65% गुणवत्ता निर्दिष्ट करने के लिए ('imagejpeg',' imagegif', आदि पर काम करता है): 'imagejpeg ($ newImage, $ destination, 65);' –

+0

विशेष रूप से पिक्सेल रिज़ॉल्यूशन या संपीड़न के बारे में निश्चित नहीं है, लेकिन गुणवत्ता को संशोधित करने पर अप्रत्यक्ष रूप से इन्हें नियंत्रित करें। –

2

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

आपको इन घटनाओं को हर समय चलाने की आवश्यकता नहीं है - आपको केवल तभी आवश्यकता होती है जब आपका स्वयं का सर्वर लोड को संभालने में सक्षम न हो।

जाहिर है आपको यह देखने के लिए अपनी लागत का पूर्वानुमान करना होगा कि यह इसके लायक है या नहीं, लेकिन आपको केवल उस समय के लिए भुगतान करना है जब आप उपयोग करते हैं और कीमतें 8.5 सी/घंटा से शुरू होती हैं, यह आपकी आवश्यकताओं के लिए पर्याप्त आर्थिक हो सकती है।

+0

मुझे आश्चर्य है कि थंबनेल पीढ़ी के लिए सार्वजनिक एएमआई नहीं है। ईसी 2 सीखने के लिए एक अच्छी परियोजना की तरह लगता है अगर कोई किसी की तलाश में है :-) – dkamins

1

मैं आपको ExactImage का उपयोग करने का सुझाव दूंगा। बेंचमार्क के अनुसार यह ImageMagick से तेज़ है।

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