سؤال

لدي مجموعة من جودة عالية ملفات PNG.أريد أن استخدام PHP لتحويلها إلى JPG بسبب انها أصغر أحجام الملفات مع الحفاظ على الجودة.أريد أن عرض ملفات JPG على شبكة الإنترنت.

هل PHP لديهم وظائف/مكتبات أن تفعل هذا ؟ هو نوعية/ضغط جيد ؟

هل كانت مفيدة؟

المحلول

هل هذا لتحويل بأمان PNG إلى JPG مع الشفافية باللون الأبيض.

$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);

نصائح أخرى

كن حذرا من ما تريد تحويله. JPG لا يدعم ألفا الشفافية في حين لا PNG. سوف تفقد تلك المعلومات.

لتحويل، يمكنك استخدام الدالة التالية:

// 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() وظائف من مكتبة GD.

وهذا مثال صغير من شأنها أن تحويل "image.png 'إلى' image.jpg و" في 70٪ من جودة الصورة:

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

وعلى أمل أن يساعد

<?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");
    }
}
    ?>

وهذا هو السيناريو المصغرات جيد جدا =) وإليك مثال:

و$ مسار = المسار إلى المجلد حيث الصورة الأصلية. $ اسم = اسم الملف من الملف الذي تريد أن تجعل صورة مصغرة. $ thumbpath = المسار إلى الدليل حيث تريد الصورة المصغرة ليتم حفظها في. $ maxwidth = أقصى عرض الصورة المصغرة في PX على سبيل المثال. 100 (واللي تبونه يكون 100px).

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

وقد ترغب في النظر في صورة ماغيك ، وعادة يعتبر بحكم الأمر الواقع المكتبة القياسية لمعالجة الصور. لا تتطلب وحدة فب إضافية ليتم تثبيتها على الرغم من، ولست متأكدا إن وجدت / والتي تتوفر في تثبيت افتراضي.

وHTH.

وPHP لديه بعض وظائف معالجة الصور جنبا إلى جنب مع <ل أ href = "http://docs.php.net/imagecreatefrompng" يختلط = "نوفولو noreferrer"> imagecreatefrompng و <لأ href = "http://docs.php.net/imagejpeg" يختلط = "نوفولو noreferrer "> وظيفة imagejpeg . وسيكون أول خلق تمثيل داخلي من ملف صورة PNG في حين تستخدم الثانية لانقاذ هذا التمثيل كملف صورة JPEG.

هذه القائمة فب صورة المكتبات . أساسا انها GD أو يماغيماغيك.

وأنا أعلم أنها ليست إجابة محددة OP, ولكن كما الإجابات بالفعل تعطى...

هل كنت حقا بحاجة إلى القيام بذلك في PHP ?
ما أعنيه هو :إذا كنت بحاجة إلى تحويل الكثير من الصور ، يفعلون ذلك في PHP قد لا تكون أفضل طريقة :عليك أن يواجه memory_limit, max_execution_time, ...

وأود أن أقول أيضا GD قد لا تحصل على أفضل جودة/حجم النسبة ؛ ولكن ليس متأكد من ذلك (إذا كنت لا مقارنة بين GD و حلول أخرى ، أنا مهتم جدا من النتائج؛ -))

نهج آخر ، وليس باستخدام PHP, استخدام صورة السحر عن طريق سطر الأوامر (وليس كامتداد PHP مثل غيره من الناس اقترح)

يجب عليك أن تكتب قذيفة النصي أن يذهب من خلال جميع .png ملفات, ويعطي لهم إما

  • convert لخلق جديد .jpg ملف لكل .png الملف
  • أو mogrify مباشرة العمل على الملف الأصلي و تجاوز ذلك.


كما sidenote :إذا كنت تفعل هذا مباشرة على خادم الإنتاج ، يمكن وضع بعض وقت النوم بين باقات من التحويلات ، ندعه يبرد قليلا في بعض الأحيان ^^


لقد استخدم شيل + convert/mogrify عدة مرات (وجود لهم الترشح شيء مثل 10 ساعات وقت واحد), وهم قيام بهذه المهمة بشكل جيد :-)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top