2011-09-06 10 views
5

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

if ($fileExtension == "jpg" || 
     $fileExtension == "jpeg" || 
     $fileExtension == "png" || 
     $fileExtension == "gif"){ 

     // GD variables: 
     list($width, $height, $type) = GetImageSize($uploadedFile['tmp_name']); 

     // Image sizes: 
     $bigImage = array(800, 453); 
     $mediumImage = array(410, 231); 
     $listImage = array(120, 68); 
     $thumbnail = array(90, 51); 

     $sourceAspect = $width/$height; 
     $bigAspect = $bigImage[0]/$bigImage[1]; 
     $mediumAspect = $mediumImage[0]/$mediumImage[1]; 
     $listAspect = $listImage[0]/$listImage[1]; 
     $thumbnailAspect = $thumbnail[0]/$thumbnail[1]; 

     // Image is PNG: 
     if ($type == IMAGETYPE_PNG){ 
      $image = imagecreatefrompng($uploadedFile['tmp_name']); 
      $valid = true; 
     } 

     // Image is JPEG: 
     else if ($type == IMAGETYPE_JPEG){ 
      $image = imagecreatefromjpeg($uploadedFile['tmp_name']); 
      $valid = true; 
     } 

     // Image is GIF: 
     else if ($type == IMAGETYPE_GIF){ 
      $image = imagecreatefromgif($uploadedFile['tmp_name']); 
      $valid = true; 
     } 

     // Format not allowed: 
     else { 
      $valid = false; 
     } 

     // Start creating images: 
     if ($valid){ 

      // Get size: 
      $imageSize = getimagesize($uploadedFile['tmp_name']); 

      // Generate canvas: 
      $bCanvas = imagecreatetruecolor($bigImage[0], $bigImage[1]); 
      $mCanvas = imagecreatetruecolor($mediumImage[0], $mediumImage[1]); 
      $lCanvas = imagecreatetruecolor($listImage[0], $listImage[1]); 
      $tCanvas = imagecreatetruecolor($thumbnail[0], $thumbnail[1]); 

      // Copy content: 
      imagecopyresampled($bCanvas, $image, 0, 0, 0, 0, ($bigImage[0] * $sourceAspect), ($bigImage[1]/$sourceAspect), $imageSize[0], $imageSize[1]); 
      imagecopyresampled($mCanvas, $image, 0, 0, 0, 0, $mediumImage[0], $mediumImage[1], $imageSize[0], $imageSize[1]); 
      imagecopyresampled($lCanvas, $image, 0, 0, 0, 0, $listImage[0], $listImage[1], $imageSize[0], $imageSize[1]); 
      imagecopyresampled($tCanvas, $image, 0, 0, 0, 0, $thumbnail[0], $thumbnail[1], $imageSize[0], $imageSize[1]); 

      // Save images: 
      $saveB = imagejpeg($bCanvas, $targetFile.'_big.jpg', 90); 
      $saveM = imagejpeg($mCanvas, $targetFile.'_medium.jpg', 90); 
      $saveT = imagejpeg($lCanvas, $targetFile.'_list.jpg', 90); 
      $saveT = imagejpeg($tCanvas, $targetFile.'_thumb.jpg', 90); 

      // Destroy images: 
      imagedestroy($image); 
      imagedestroy($bCanvas); 
      imagedestroy($mCanvas); 
      imagedestroy($lCanvas); 
      imagedestroy($tCanvas); 

      // Watermark images: 
      $mark = imagecreatefrompng("logo.png"); 
      list($mwidth, $mheight) = getimagesize("logo.png"); 
      $img = imagecreatefromjpeg($targetFile.'_big.jpg'); 

      list($bwidth, $bheight) = getimagesize($targetFile.'_big.jpg'); 
      imagecopy($img, $mark, $bwidth-$mwidth-25, $bheight-$mheight-25, 0, 0, $mwidth, $mheight); 
      imagejpeg($img, $targetFile.'_big.jpg', 100); 
      imagedestroy($img); 

     } else { 
      echo "0"; 
     } 

    } else { 
     move_uploaded_file($tempFile,$targetFile.'.'.$fileExtension); 
    } 

मैं वास्तव में खुश है, तो किसी ने मुझे इस समस्या के समाधान में मदद कर सकता होगा:

यह मेरा कोड अब तक है। मैं कई तरीकों की कोशिश कर रहा हूं लेकिन उनमें से कोई भी ठीक से काम नहीं कर रहा था। जैसा कि आप शीर्ष पर देख सकते हैं मैंने पहले से ही कैनवास आकार को परिभाषित किया है जिसे मैं "bigImage", "mediumImage", "listImage" और "थंबनेल" चर में उपयोग करना चाहता हूं।

अग्रिम धन्यवाद! // जोनाथन

+0

जहां तक ​​मुझे याद है कि आप जीडी के साथ ऐसा नहीं कर सकते हैं, इमागिक हालांकि इन संभावनाओं को प्रदान करेगा। – markus

उत्तर

16

छवि का आकार बदलने के एक से अधिक तरीके हैं। मैं तुम्हारे लिए उन्हें बाहर वर्तनी होगी:

  • खिंचाव फिट करने के लिए - छवि पहलू अनुपात
  • Scale to fit अनदेखी वांछित आकार में बदल जाता है - छवि को फिर से है, ताकि एक आयाम (चौड़ाई या ऊंचाई) वांछित आकार है जबकि दूसरा पहलू अनुपात बनाए रखने के समान या छोटा है (ठोस रंग के साथ छोटे पक्ष को भरने के लिए एक अतिरिक्त कदम की आवश्यकता हो सकती है)
  • Crop to fit - छवि का आकार बदल गया है ताकि एक आयाम (चौड़ाई या ऊंचाई) वांछित आकार है जबकि दूसरा पहलू अनुपात बनाए रखने के समान या लंबा है (बाहरी क्षेत्र को ट्रिम करने के लिए एक अतिरिक्त कदम आवश्यक है)

पीएस: दोनों लेख मेरे द्वारा लिखे गए थे।

+0

धन्यवाद, मैंने आपके लेख का उपयोग करने की कोशिश की लेकिन मैं पूरी तरह से काले छवि के साथ समाप्त हुआ। मुझे नहीं पता क्यों, लेकिन मैं कई बार कोड पर गया हूं और मुझे समस्या नहीं मिल रही है। यहां मेरे कोड का उपयोग करके मेरा कोड है: http://pastebin.com/XgDvUEWe – Jonathan

+0

क्षमा करें, मुझे यह काम मिल गया है! :) – Jonathan

+0

@ जोनाथन, मैंने समस्या का पता लगाने के लिए पूर्ण त्रुटि रिपोर्टिंग सक्षम की; आपके पेस्ट का संशोधित संस्करण http://pastebin.com/J41aPe9g –

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