При создании изображения вызова домашней страницы иногда необходимо получить изображение фиксированного размера, поскольку положение изображения домашней страницы обычно указывается дизайнером, если нужно вызвать изображение последней версии, потому что неизвестно, что именно. пропорцию изображения, которую загрузит клиент, поэтому иногда нет возможности определить пропорцию изображения. Авторы интерфейсных страниц обычно используют метод фиксации высоты и ширины элемента 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
/*
*Описание: Функция заключается в обрезке изображения до изображения любого размера без деформации изображения.
* Описание параметра: введите имя файла изображения, подлежащего обработке, сгенерируйте имя файла сохранения нового изображения, сгенерируйте ширину нового изображения и сгенерируйте высоту нового изображения.
* написал smallchicken
* время 18 декабря 2008 г.
*/
// Получаем изображение любого размера, растягиваем недостающие части, без деформации, без пустого пространства
function my_image_resize($src_file, $dst_file, $new_width, $new_height) {
if($new_width <1 || $new_height <1) {
echo "Ошибка ширины или высоты параметров!";
Выход();
}
если(!file_exists($src_file)) {
echo $src_file. "не существует!";
Выход();
}
//Тип изображения
$type=exif_imagetype($src_file);
$support_type=array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);
if(!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);
перерыв;
по умолчанию:
echo "Ошибка загрузки изображения!";
Выход();
}
$w=imagesx($src_img);
$h=imagesy($src_img);
$ratio_w=1,0 * $new_width / $w;
$ratio_h=1,0 * $new_height / $h;
$коэффициент = 1,0;
// Высота и ширина сгенерированного изображения меньше или больше исходного. Принцип состоит в том, чтобы увеличить в большом масштабе и уменьшить в большом масштабе (уменьшенный коэффициент будет меньше).
if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) {
if($ratio_w <$ratio_h) {
$ratio = $ratio_h ; // Случай 1, соотношение ширины меньше направления высоты, обрезаем или увеличиваем в соответствии со стандартом соотношения высот.
}еще {
$ratio = $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
}// завершаем функцию
?>