2012-09-20 14 views
14

कनवर्ट करें मैं डिजिटल एसेट मैनेजर के लिए थंबनेल बना रहा हूं, छविमैजिक के साथ ऐसा करने का सबसे अच्छा तरीका क्या है?कल्पना .psd और .ai को पीएनजी/जेपीजी में कल्पना

क्या वहां कोई अच्छा संसाधन है?

+0

कमांड लाइन ImageMagick 'convert' है की तुलना में कोड के नए हिस्से में आकार को परिभाषित करना चाहिए। 'orig.psd output.jpg' को कन्वर्ट करने का प्रयास करें और देखें कि यह भी ऐसा करेगा - अगर ऐसा होता है, तो आप आकार बदलने वाले विकल्पों के साथ गड़बड़ करना शुरू कर सकते हैं। यदि ऐसा नहीं होता है, तो आप गलत पेड़ को भौंकने में समय बर्बाद नहीं करेंगे। –

+0

क्या कोई तरीका है कि मैं php (imagick) से कमांड लाइन सामान कर सकता हूं? –

+0

यह बस इतना है कि आप रूपांतरण का परीक्षण कर सकते हैं और देख सकते हैं कि यह भी काम करेगा या नहीं। एक साधारण कमांड बनाम। ऐसा करने के लिए एक php स्क्रिप्ट को बाहर करने की कोशिश करने के कुछ घंटों। –

उत्तर

17

मैंने इसे हल किया और दुनिया के साथ साझा किया जाएगा! यह थंबनेल में .ai, .psd, .jpg, .png, .gif को परिवर्तित करेगा। - करने के लिए बचाने के लिए निर्देशिका

$ dir:

यहाँ एक समारोह है कि 4 पैरामीटर लेता है।
$ tmpName - एक्सटेंशन को छोड़कर फ़ाइल का नाम देने का नाम।
$ फ़ाइल टाइप - स्वयं स्पष्टीकरण।
$ आकार - बड़ा या छोटा।

function thumbGenerator($dir,$tmpName,$fileType,$size){ 
    $saveFileType = "png"; 
    $imagePath = $dir.$tmpName.".".$fileType; 
    $image = new Imagick(); 
    $image->readimage($imagePath); 
    if($fileType == "psd"){ 
     $image->setIteratorIndex(0); 
    } 
    $dimensions = $image->getImageGeometry(); 
    $width = $dimensions['width']; 
    $height = $dimensions['height']; 
    if($size == "large"){ 
     $maxWidth = 720; 
     $maxHeight =720; 
    } 
    if($size == "small"){ 
     $maxWidth = 250; 
     $maxHeight =250; 
    } 
    if($height > $width){ 
     //Portrait 
     if($height > $maxHeight) 
      $image->thumbnailImage(0, $maxHeight); 
      $dimensions = $image->getImageGeometry(); 
      if($dimensions['width'] > $maxWidth){ 
       $image->thumbnailImage($maxWidth, 0); 
      } 
    }elseif($height < $width){ 
     //Landscape 
     $image->thumbnailImage($maxWidth, 0); 
    }else{ 
     //square 
     $image->thumbnailImage($maxWidth, 0); 
    } 
    if($size == "large"){ 
     $image->writeImage($dir . $tmpName."-lg.".$saveFileType); 
    } 
    if($size == "small"){ 
     $image->writeImage($dir . $tmpName."-sm.".$saveFileType);; 
    } 
} 
+1

यदि यह काम करता है तो अपना जवाब स्वीकार करें। चीयर्स! प्रतिक्रिया के लिए –

4

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

$ dir - निर्देशिका को सहेजने के लिए।
$ tmpName - एक्सटेंशन को छोड़कर फ़ाइल का नाम देने का नाम।
$ फ़ाइल टाइप - स्वयं स्पष्टीकरण।
$ आकार - बड़ा या छोटा। आप पूर्वनिर्धारित चौड़ाई के लिए स्ट्रिंग के बजाय थंबनेल के लिए पिक्सेल चौड़ाई मान लेने पर विचार कर सकते हैं। आइए मान लें कि भविष्य में आपको अपने पृष्ठ के एक नए खंड में बड़े थंबनेल की आवश्यकता होगी (यानी "छोटे" थंबनेल के लिए 500px के साथ रेटिना तैयार आइकन)। आप अधिमानतः बल्कि साझा thumbGenerator समारोह

function thumbGenerator($dir,$tmpName,$fileType,$size){ 
    $saveFileType = "png"; 
    $imagePath = $dir.$tmpName.".".$fileType; 
    $image = new Imagick(); 
    $image->readimage($imagePath); 
    if($fileType == "psd"){ 
     $image->setIteratorIndex(0); 
    } 
/* Simplify this code section below 
    $dimensions = $image->getImageGeometry(); 
    $width = $dimensions['width']; 
    $height = $dimensions['height']; 
*/  
    list($width,$height) = $image->getImageGeometry(); // <--- new code 
/* Use $size for the pixel width/height instead and remove the code below 
    if($size == "large"){ 
     $maxWidth = 720; 
     $maxHeight =720; 
    } 
    if($size == "small"){ 
     $maxWidth = 250; 
     $maxHeight =250; 
    } 
*/ 
    if($height > $width){ 
     //Portrait 
     if($height > $size) 
      $image->thumbnailImage(0, $size); 
      $dimensions = $image->getImageGeometry(); 
      if($width > $size){ // <--- use the previously created $width variable 
       $image->thumbnailImage($size, 0); 
      } 
/* Don't need this duplicate code. 

    }elseif($height < $width){ 
     //Landscape 
     $image->thumbnailImage($maxWidth, 0); 
*/ 
    }else{ 
     // square or landscape 
     $image->thumbnailImage($maxWidth, 0); 
    } 
/* DRY - do not repeat yourself - Simplify it and use the pixel width in the image name 
    if($size == "large"){ 
     $image->writeImage($dir . $tmpName."-lg.".$saveFileType); 
    } 
    if($size == "small"){ 
     $image->writeImage($dir . $tmpName."-sm.".$saveFileType);; 
    } 
*/ 
$image->writeImage($dir . $tmpName."-".$size.".".$saveFileType);; 
} 
+0

धन्यवाद। यह आश्चर्यजनक है कि आप कितनी जल्दी कुछ सीख सकते हैं, एक महीने में वापस आएं और आप इसे फिर से ऐसा नहीं करेंगे। इन विशेषताओं में से कुछ जिन्हें आपने पुनरावृत्ति के रूप में टिप्पणी की है, वास्तव में आवश्यक हैं क्योंकि वे एप्लिकेशन विशिष्ट हैं। मैं आलोचना की सराहना करता हूं। धन्यवाद! –

+0

क्या आपने वास्तव में इस कोड का परीक्षण किया है? यह मेरे लिए काम नहीं करता है, विशेष रूप से 'सूची ($ चौड़ाई, $ ऊंचाई) = $ image-> getImageGeometry() 'part। चूंकि परिणाम आकार 2 की सरणी नहीं है, लेकिन सहयोगी 'सरणी (' चौड़ाई '=> 23,' ऊंचाई '=> 42) ' –

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