عند إنشاء صورة استدعاء للصفحة الرئيسية، يكون من الضروري أحيانًا الحصول على صورة ذات حجم ثابت، لأن موضع الصورة للصفحة الرئيسية يتم تحديده عادةً بواسطة المصمم إذا كان سيتم استدعاء أحدث صورة للإصدار، لأنه غير معروف نسبة الصورة التي سيقوم العميل بتحميلها، لذلك، في بعض الأحيان لا توجد طريقة لتحديد نسبة الصورة، عادةً ما يستخدم كاتبو الصفحة الأمامية طريقة تثبيت ارتفاع وعرض عنصر img للتحكم في الصورة من التدفق. ومع ذلك، إذا كانت نسبة الصورة ليست النسبة المطلوبة، فسوف تتسبب في تشويه الصورة بعد استدعائها، مما يؤثر بشكل كبير على جمال الصفحة. أحد الحلول هو تغيير حجمها وفقًا لنسبة الصورة الأصلية. ستحتوي الصورة المقاسة حتماً على مساحات فارغة. املأ المساحات الفارغة بالألوان بهذه الطريقة، على الرغم من أن الصورة لن تكون مشوهة، سيكون هناك الكثير من التشويه، على سبيل المثال، إذا أرسل المستخدم صورة كبيرة جدًا طويلة ولكن ذات عرض متوسط، وإذا تم ضغطها في صورة بنسبة 1:1، فلن تكون الصورة مرئية بعد الضغط.
الحل الذي أقترحه هنا هو قص أي صورة بحجم ثابت، ولن يتم تشويه الصورة، وسيتم تمديد المساحة الفارغة وملؤها دائمًا. يجب على الأصدقاء الذين استخدموا bcastr أن يعرفوا أن bcastr يضمن عدم تشويه استدعاء الصورة، بالنسبة لإطار صورة الإخراج ذي الحجم الثابت، تحتوي الصورة المصدر على الحالات التالية:
1: ارتفاع وعرض الصورة المراد إخراجها أصغر من ارتفاع وعرض الصورة المصدر، ويتم كتابتها كحكم $new_width<$src_width && $new_height<$src_width
2: ارتفاع وعرض الصورة المراد إخراجها أكبر من ارتفاع وعرض الصورة الأصلية، ويتم كتابته كحكم $new_width>$src_width && $new_height>$src_width
3: استبعاد النوعين 1 و 2، أي حالة التكبير والتصغير في نفس الوقت بالإضافة إلى حكم المساواة بالنسبة لـ 1 و 2، فإن رموز معالجة الوظائف هي نفسها تمامًا، لذا يمكن تلخيصها في بيان معالجة واحد
لإعطاء رمز تنفيذ PHP
<?php
/*
*الوصف: تتمثل الوظيفة في قص الصورة إلى صورة بأي حجم دون تشويه الصورة.
* وصف المعلمة: أدخل اسم ملف الصورة المراد معالجتها، وأنشئ اسم ملف الحفظ للصورة الجديدة، وأنشئ عرض الصورة الجديدة، وأنشئ ارتفاع الصورة الجديدة.
* بقلم سمولتشيكن
*الزمن 2008-12-18
*/
// احصل على صورة بأي حجم، وقم بتمديد الأجزاء المفقودة، بدون تشوه، بدون مساحة فارغة
الدالة my_image_resize($src_file, $dst_file, $new_width, $new_height) {
إذا($new_width <1 || $new_height <1) {
صدى "خطأ في العرض أو الارتفاع في المعلمات!";
مخرج()؛
}
إذا (! file_exists($src_file)) {
echo $src_file "غير موجود!";
مخرج()؛
}
//نوع الصورة
$type=exif_imagetype($src_file);
$support_type=array(IMAGETYPE_JPEG , IMAGETYPE_PNG , IMAGETYPE_GIF);
إذا(!in_array($type, $support_type,true)) {
echo "هذا النوع من الصور لا يدعم! يدعم فقط jpg أو gif أو png";
مخرج()؛
}
// تحميل الصورة
التبديل(نوع $) {
الحالة IMAGETYPE_JPEG :
$src_img=imagecreatefromjpeg($src_file);
استراحة؛
الحالة IMAGETYPE_PNG :
$src_img=imagecreatefrompng($src_file);
استراحة؛
الحالة IMAGETYPE_GIF :
$src_img=imagecreatefromgif($src_file);
استراحة؛
تقصير:
صدى "خطأ في تحميل الصورة!";
مخرج()؛
}
$w=imagesx($src_img);
$h=imagesy($src_img);
$ratio_w=1.0 * $new_width / $w؛
$ratio_h=1.0 * $new_height / $h;
نسبة $=1.0;
// ارتفاع وعرض الصورة التي تم إنشاؤها أصغر أو أكبر من الصور الأصلية. المبدأ هو التكبير بنسبة كبيرة والتصغير بنسبة كبيرة (النسبة المخفضة ستكون أصغر).
إذا( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) {
إذا($ratio_w < $ratio_h) {
$ratio = $ratio_h ; // الحالة 1، نسبة العرض أصغر من اتجاه الارتفاع، أو قصها أو تكبيرها وفقًا لمعيار نسبة الارتفاع
}آخر {
نسبة $ = $ratio_w ;
}
// حدد صورة مؤقتة متوسطة تتوافق نسبة أبعادها مع المتطلبات المستهدفة تمامًا
$inter_w=(int)($new_width / $ratio);
$inter_h=(int) ($new_height / $ratio)؛
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
imagecopy($inter_img, $src_img, 0,0,0,0,$inter_w,$inter_h);
// أنشئ صورة مؤقتة بأقصى طول جانبي كنسبة الصورة المستهدفة $ratio
// تحديد صورة جديدة
$new_img=imagecreatetruecolor($new_width,$new_height);
imagecopyresampled($new_img,$inter_img,0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
التبديل(نوع $) {
الحالة IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100); // تخزين الصورة
استراحة؛
الحالة IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100);
استراحة؛
الحالة IMAGETYPE_GIF :
imagegif($new_img,$dst_file,100);
استراحة؛
تقصير:
استراحة؛
}
} // النهاية إذا 1
// 2 جانب واحد من الصورة المستهدفة أكبر من الصورة الأصلية، وجانب واحد أصغر من الصورة الأصلية قم أولاً بتكبير الصورة العادية، ثم قصها.
// =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1)) )
آخر{
$ratio=$ratio_h>$ratio_w? $ratio_h : $ratio_w; // خذ القيمة ذات النسبة الأكبر
// تحديد صورة كبيرة في المنتصف، يكون ارتفاع الصورة أو عرضها مساويًا للصورة المستهدفة، ثم تكبير الصورة الأصلية
$inter_w=(int)($w * $ratio);
$inter_h=(int) ($h * $ratio);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
// قص الصورة الأصلية بعد تغيير حجمها
imagecopyresampled($inter_img,$src_img,0,0,0,0,$inter_w,$inter_h,$w,$h);
// تحديد صورة جديدة
$new_img=imagecreatetruecolor($new_width,$new_height);
imagecopy($new_img, $inter_img, 0,0,0,0,$new_width,$new_height);
التبديل(نوع $) {
الحالة IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100); // تخزين الصورة
استراحة؛
الحالة IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100);
استراحة؛
الحالة IMAGETYPE_GIF :
imagegif($new_img,$dst_file,100);
استراحة؛
تقصير:
استراحة؛
}
}//if3
}// وظيفة النهاية
?>