2009-07-29 18 views
40

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

क्या PHP के पास ऐसा करने के लिए कार्य/पुस्तकालय हैं? गुणवत्ता/संपीड़न कोई अच्छा है?

+6

ध्यान दें कि क्या छवियाँ हैं पर निर्भर करता है, JPG हमेशा एक PNG तुलना में एक छोटे फ़ाइल आकार के लिए नहीं होगा, तो सुनिश्चित करें कि आप अपनी स्थिति के लिए सही उपयोग कर रहे हैं। http://lbrandy.com/blog/2008/10/my-first-and-last-webcomic/ – jimyi

उत्तर

56

जो आप कन्वर्ट करना चाहते हैं उसके बारे में सावधान रहें। जेपीजी अल्फा-पारदर्शिता का समर्थन नहीं करता है जबकि पीएनजी करता है। आप उस जानकारी को खो देंगे।

// Quality is a number between 0 (best compression) and 100 (best quality) 
function png2jpg($originalFile, $outputFile, $quality) { 
    $image = imagecreatefrompng($originalFile); 
    imagejpeg($image, $outputFile, $quality); 
    imagedestroy($image); 
} 

इस समारोह जी.डी. पुस्तकालय से imagecreatefrompng() और imagejpeg() कार्यों का उपयोग करता:

परिवर्तित करने के लिए, आप निम्न फ़ंक्शन का उपयोग कर सकते हैं।

+9

कृपया पीएनजी को सुरक्षित रूप से जेपीजी में परिवर्तित करने के लिए डैनिलॉन के उत्तर पर एक नज़र डालें। – Codemole

+4

यह उत्तर पारदर्शिता के साथ पीएनजी फाइलों के साथ काम नहीं करता है। –

3

PHP में image processing functionsimagecreatefrompng और imagejpeg function के साथ कुछ image processing functions है। पहला पीएनजी छवि फ़ाइल का आंतरिक प्रतिनिधित्व करेगा जबकि दूसरा उस जेपीईजी छवि फ़ाइल के रूप में उस प्रस्तुति को सहेजने के लिए उपयोग किया जाता है।

4

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

एचटीएच।

9

यह एक छोटा सा उदाहरण है कि 70% छवि गुणवत्ता पर 'image.jpg' को 'image.png' में परिवर्तित कर देगी:

<?php 
$image = imagecreatefrompng('image.png'); 
imagejpeg($image, 'image.jpg', 70); 
imagedestroy($image); 
?> 

आशा है कि

2

में मदद करता है मैं जानता हूँ कि यह एक सटीक नहीं है ओपी का जवाब, लेकिन जैसा कि उत्तर पहले से ही दिए जा चुके हैं ...

क्या आपको वास्तव में PHP में ऐसा करने की आवश्यकता है?
क्या मेरा मतलब है: यदि आप, पीएचपी में यह कर सबसे अच्छा तरीका हो नहीं हो सकता है छवियों का एक बहुत कुछ बदलने की आवश्यकता: आप memory_limit, max_execution_time को सामना किया होगा, ...

मैं भी कह सकते हैं कि जीडी आपको सबसे अच्छी गुणवत्ता/आकार अनुपात नहीं मिल सकता है; लेकिन इस बारे में सुनिश्चित नहीं

एक और दृष्टिकोण (यदि आप जी.डी. और अन्य समाधान के बीच तुलना करते हैं, मैं बहुत परिणाम ;-) द्वारा दिलचस्पी), पीएचपी का उपयोग नहीं, कमांड लाइन के माध्यम से Image Magick उपयोग करने के लिए किया जाएगा (और नहीं के रूप में अन्य लोगों की तरह एक PHP एक्सटेंशन सुझाव)

आप एक खोल स्क्रिप्ट है कि सभी .png फ़ाइलों के माध्यम से चला जाता है लिखने के लिए होगा, और उन्हें या तो

  • convert एक नया बनाने के लिए करने के लिए देता है ई के लिए .jpg फ़ाइल एएच .png फ़ाइल
  • या mogrify सीधे मूल फ़ाइल पर काम करने और इसे ओवरराइड करने के लिए।


एक sidenote के रूप: यदि आप अपने उत्पादन सर्वर पर सीधे यह कर रहे हैं, यदि आप रूपांतरण के गुच्छों के बीच कुछ सोने का समय डाल सकता है, यह ^^


कभी कभी एक सा ठंडा जाने के लिए मैं खोल स्क्रिप्ट + convert/mogrify कई बार (होने के लिए उन्हें 10 घंटे की तरह कुछ एक समय के लिए प्रदर्शित) का उपयोग किया है, और वे वास्तव में अच्छी तरह से काम करते हैं :-)

9
<?php 
function createThumbnail($imageDirectory, $imageName, $thumbDirectory, $thumbWidth) { 
    $explode = explode(".", $imageName); 
    $filetype = $explode[1]; 

    if ($filetype == 'jpg') { 
     $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName"); 
    } else 
    if ($filetype == 'jpeg') { 
     $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName"); 
    } else 
    if ($filetype == 'png') { 
     $srcImg = imagecreatefrompng("$imageDirectory/$imageName"); 
    } else 
    if ($filetype == 'gif') { 
     $srcImg = imagecreatefromgif("$imageDirectory/$imageName"); 
    } 

    $origWidth = imagesx($srcImg); 
    $origHeight = imagesy($srcImg); 

    $ratio = $origWidth/$thumbWidth; 
    $thumbHeight = $origHeight/$ratio; 

    $thumbImg = imagecreatetruecolor($thumbWidth, $thumbHeight); 
    imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $origWidth, $origHeight); 

    if ($filetype == 'jpg') { 
     imagejpeg($thumbImg, "$thumbDirectory/$imageName"); 
    } else 
    if ($filetype == 'jpeg') { 
     imagejpeg($thumbImg, "$thumbDirectory/$imageName"); 
    } else 
    if ($filetype == 'png') { 
     imagepng($thumbImg, "$thumbDirectory/$imageName"); 
    } else 
    if ($filetype == 'gif') { 
     imagegif($thumbImg, "$thumbDirectory/$imageName"); 
    } 
} 
    ?> 

यह एक बहुत अच्छी थंबनेल स्क्रिप्ट है =) यहां एक उदाहरण है:

$ पथ = उस फ़ोल्डर का पथ जहां मूल तस्वीर है। $ name = उस फ़ाइल का फ़ाइल नाम जिसे आप थंबनेल बनाना चाहते हैं। $ thumbpath = निर्देशिका का पथ जहां आप थंबनेल को सहेजना चाहते हैं। $ maxwidth = पीएक्स उदाहरण में थंबनेल की अधिकतम चौड़ाई। 100 (जो 100 पीएक्स होगा)।

createThumbnail($path, $name, $thumbpath, $maxwidth);

+1

मैंने इसका इस्तेमाल किया और यह अच्छी तरह से काम किया, धन्यवाद! – user1053263

120

क्या यह सुरक्षित रूप से सफेद में पारदर्शिता के साथ JPG में एक PNG कन्वर्ट करने के लिए।

$image = imagecreatefrompng($filePath); 
$bg = imagecreatetruecolor(imagesx($image), imagesy($image)); 
imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255)); 
imagealphablending($bg, TRUE); 
imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image)); 
imagedestroy($image); 
$quality = 50; // 0 = worst/smaller file, 100 = better/bigger file 
imagejpeg($bg, $filePath . ".jpg", $quality); 
imagedestroy($bg); 
+6

पीएनजी को सुरक्षित रूप से जेपीजी में परिवर्तित करने का यह सबसे सही तरीका है। इस उत्तर के लिए शीर्ष ++ रेटिंग जोड़ना चाहते हैं। – Codemole

+1

यह बेहतर है, पारदर्शिता से संबंधित है। दो शीर्ष उत्तर अब स्तर pegging हैं! –

+1

यह निश्चित रूप से स्वीकार्य उत्तर होना चाहिए – Scalpweb

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