استخدام PHP تحويل PNG الى JPG مع ضغط ؟
سؤال
لدي مجموعة من جودة عالية ملفات 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
ملفات, ويعطي لهم إما
كما sidenote :إذا كنت تفعل هذا مباشرة على خادم الإنتاج ، يمكن وضع بعض وقت النوم بين باقات من التحويلات ، ندعه يبرد قليلا في بعض الأحيان ^^
لقد استخدم شيل + convert
/mogrify
عدة مرات (وجود لهم الترشح شيء مثل 10 ساعات وقت واحد), وهم قيام بهذه المهمة بشكل جيد :-)