2015-06-19 6 views
21

आकार बदलने के बाद PHP छवि को ब्लैक छवि का उत्पादन करने का कारण क्या हो सकता है? निम्नलिखित कोड हमेशा प्रत्येक वैध जेपीईजी फ़ाइल के लिए एक काला छवि आउटपुट करता है।जीडी आउटपुट के साथ आकार बदलना काले छवियों

gd_info() की
<?php 

$filename = 'test.jpg'; 
$percent = 0.5; 

header('Content-Type: image/jpeg'); 

list($width, $height) = getimagesize($filename); 
$newwidth = $width * $percent; 
$newheight = $height * $percent; 

$thumb = imagecreatetruecolor($newwidth, $newheight); 
$source = imagecreatefromjpeg($filename); 

imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

imagejpeg($thumb); 
imagedestroy($thumb); 
?> 

उत्पादन:

Array 
(
    [GD Version] => bundled (2.1.0 compatible) 
    [FreeType Support] => 1 
    [FreeType Linkage] => with freetype 
    [T1Lib Support] => 
    [GIF Read Support] => 1 
    [GIF Create Support] => 1 
    [JPEG Support] => 1 
    [PNG Support] => 1 
    [WBMP Support] => 1 
    [XPM Support] => 
    [XBM Support] => 1 
    [JIS-mapped Japanese Font Support] => 
) 

कोड अन्य वातावरण में काम कर दिखाई दिया। शायद यह ओएस, स्थापित संकुल, पुस्तकालय, आदि से संबंधित है?

+0

कोड ठीक काम करता है। : -/'PHP 5.3.29'' जीडी संस्करण: बंडल (2.1.0 संगत) ' –

+0

एचएचवीएम, हिपहॉप वीएम 3.6.1 (रिलायंस) – codeaken

+0

के साथ भी काम करता है क्या आपने लॉग फ़ाइल की जांच की है? – hek2mgl

उत्तर

7
अनुसंधान

बस अपनी स्थिति को पुन: उत्पन्न करने का प्रयास किया। बाहर के बॉक्स PHP और Apache के साथ अपने कोड चल रहा है को प्रदर्शित करता है निम्नलिखित

छवि "http://localhost/" क्योंकि यह त्रुटियां हैं प्रदर्शित नहीं किया जा सकता है।

हालांकि ब्राउज़र आपको बताता है कि कुछ त्रुटियाँ थीं, वे क्योंकि हेडर जवाब में लौटाया के नहीं देखा जा सकता है इस प्रकार एक छवि के रूप में यह व्याख्या करने के लिए मजबूर कर रहा ब्राउज़र Content-Type: image/jpeg के थे। header को हटाकर और निम्नलिखित सेटिंग त्रुटियों को सेट कर देगा।

ini_set('error_reporting', E_ALL); 
ini_set('display_errors', true); 
... 
//header('Content-Type: image/jpeg'); 
... 
उत्तर

क्या कारण php जी.डी. आकार बदलने के बाद एक काले रंग की छवि का निर्माण करने के लिए कर सकते हैं?

के बाद से gd_info उत्पादन साबित करता है कि GD extension भरी हुई है, तो देखें कि फ़ाइल नाम (linux caseSensitive है) और अनुमतियाँ सही हैं। Apachewww-data (समूह) के रूप में

sudo chown :www-data test.jpg && sudo chmod 660 test.jpg 
कोड सुधार/समाधान
ini_set('error_reporting', E_ALL); 
ini_set('display_errors', true); 

if (extension_loaded('gd') && function_exists('gd_info')) 
{ 
    $filename = 'test.jpg'; 

    if (file_exists($filename) && is_readable($filename)) 
    { 
     $percent = 0.5; 

     header('Content-Type: image/jpeg'); 

     list($width, $height) = getimagesize($filename); 
     $newwidth = $width * $percent; 
     $newheight = $height * $percent; 

     $thumb = imagecreatetruecolor($newwidth, $newheight); 
     $source = imagecreatefromjpeg($filename); 

     imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

     imagejpeg($thumb); 
     imagedestroy($thumb); 
    } 
    else 
    { 
     trigger_error('File or permission problems'); 
    } 
} 
else 
{ 
    trigger_error('GD extension not loaded'); 
} 
टिप्पणियाँ

चल रहा है यह एक अस्थायी समाधान (विकास पर्यावरण) के रूप में इस्तेमाल किया जाना चाहिए।आईएमएचओ, त्रुटियों को केंद्रीय त्रुटि हैंडलर द्वारा नियंत्रित किया जाना चाहिए, display_errors उत्पादन में false होना चाहिए। इसके अलावा, त्रुटियां (इस मामले में Fatal error होगा) डिफ़ॉल्ट रूप से लॉग इन हैं - अधिक लॉग (अक्सर, बेहतर) के लिए लॉग की जांच करें। इसके अलावा, (apt के साथ) लिनक्स पर एक लाइनर अपने सिस्टम पर जीडी स्थापित हो जाएगा:

sudo apt-get update && sudo apt-get install php5-gd && sudo /etc/init.d/apache2 restart 
0

सुनिश्चित करें कि जीडी स्थापित और सक्षम है।

जाँच करने के लिए, इस आदेश के साथ एक PHP फ़ाइल बनाने: एक ब्राउज़र के माध्यम फ़ाइल

<?php phpinfo(); 

प्रवेश और जी.डी. अनुभाग तक स्क्रॉल करें। यदि जीडी वहां नहीं है, या यह अक्षम है, तो इसे yum, apt-get या Windows समकक्ष के साथ जोड़ें।

आपको जीडी लाइब्रेरी भी उपलब्ध है (http://www.libgd.org/)।

बेहतर छवि गुणवत्ता के लिए IMagick (http://php.net/manual/en/book.imagick.php) पर स्विच करने पर विचार करें।

0

त्रुटियों को हो रही हैं देखने के लिए इस कोड का प्रयास करें:

<?php 
error_reporting(E_ALL); 
ini_set("display_errors", 1); 

$filename = 'test.jpg'; 
$percent = 0.5; 

list($width, $height) = getimagesize($filename); 
$newwidth = $width * $percent; 
$newheight = $height * $percent; 

$thumb = imagecreatetruecolor($newwidth, $newheight); 
$source = imagecreatefromjpeg($filename); 

imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

//header('Content-Type: image/jpeg'); 
//imagejpeg($thumb); 
//imagedestroy($thumb); 
?> 

तो, अगर पीएचपी एक त्रुटि का सामना कर रहा है, यह यह स्क्रीन पर दिखाई देगा। अगर कोई त्रुटि नहीं है, तो स्क्रीन खाली दिखाई देगी।

+0

त्रुटि_ रिपोर्टिंग केवल रिपोर्टिंग का स्तर निर्धारित करेगी। Http://php.net/manual/en/function.error-reporting.php – sitilge

+0

ओह, मैं 'display_errors 'निर्देश के बारे में भूल गया, बस इसे कोड में जोड़ा (सोच रहा है कि क्या आप इस बारे में बात कर रहे थे?) – Dinei

0

समारोह नीचे, एक थंबनेल बनाता है कुछ परिवर्तन आप कर सकते हैं हे/स्क्रीन पर पी यह रूप में अच्छी तरह से। मुझे लगता है कि यह इस तरह से अधिक उपयोगी है।

/* 
* PHP function to resize an image maintaining aspect ratio 
* http://salman-w.blogspot.com/2008/10/resize-images-using-phpgd-library.html 
* 
* Creates a resized (e.g. thumbnail, small, medium, large) 
* version of an image file and saves it as another file 
*/ 

define('THUMBNAIL_IMAGE_MAX_WIDTH', 150); 
define('THUMBNAIL_IMAGE_MAX_HEIGHT', 150); 

function generate_image_thumbnail($source_image_path, $thumbnail_image_path) 
{ 
    list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path); 
    switch ($source_image_type) { 
     case IMAGETYPE_GIF: 
      $source_gd_image = imagecreatefromgif($source_image_path); 
      break; 
     case IMAGETYPE_JPEG: 
      $source_gd_image = imagecreatefromjpeg($source_image_path); 
      break; 
     case IMAGETYPE_PNG: 
      $source_gd_image = imagecreatefrompng($source_image_path); 
      break; 
    } 
    if ($source_gd_image === false) { 
     return false; 
    } 
    $source_aspect_ratio = $source_image_width/$source_image_height; 
    $thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH/THUMBNAIL_IMAGE_MAX_HEIGHT; 
    if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) { 
     $thumbnail_image_width = $source_image_width; 
     $thumbnail_image_height = $source_image_height; 
    } elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) { 
     $thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio); 
     $thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT; 
    } else { 
     $thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH; 
     $thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH/$source_aspect_ratio); 
    } 
    $thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height); 
    imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height); 
    imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90); 
    imagedestroy($source_gd_image); 
    imagedestroy($thumbnail_gd_image); 
    return true; 
} 

this more जानकारी देखें।

यदि php-gd मौजूद नहीं है तो निम्न आदेश का उपयोग करें।

sudo apt-get install php5-gd 
संबंधित मुद्दे