Al hacer una imagen de llamada de página de inicio, a veces es necesario obtener una imagen de tamaño fijo, porque la posición de la imagen de la página de inicio generalmente la especifica el diseñador si se llama la imagen de la última versión, porque no se sabe cuál. proporción de la imagen que el cliente cargará, por lo tanto, a veces no hay forma de determinar la proporción de la imagen. Los redactores de la página de inicio generalmente usan un método para fijar la altura y el ancho del elemento img para controlar que la imagen se desborde. Sin embargo, si la proporción de la imagen no es la proporción requerida, la imagen se deformará después de ser llamada. Afecta en gran medida la belleza de la página. Una solución es escalarla de acuerdo con la proporción de la imagen original. La imagen escalada inevitablemente tendrá espacios en blanco. Llene los espacios en blanco con color, aunque la imagen no se deformará, habrá mucha distorsión, por ejemplo, si el usuario envía una imagen muy. alto pero tiene un ancho promedio, y si se comprime en una imagen 1:1, entonces la imagen básicamente no será visible después de la compresión.
Mi solución aquí es recortar cualquier imagen a un tamaño fijo, la imagen no se deformará y el espacio en blanco se estirará y rellenará. La imagen siempre se llenará sin espacios en blanco. Los amigos que hayan usado bcastr deben saber que bcastr. garantiza que la llamada de imagen no se deformará. Para un marco de imagen de salida de tamaño fijo, la imagen de origen tiene las siguientes situaciones:
1: La altura y el ancho de la imagen que se generará son menores que la altura y el ancho de la imagen de origen, escritos como juicio $new_width<$src_width && $new_height<$src_width
2: La altura y el ancho de la imagen que se generará son mayores que la altura y el ancho de la imagen original, escrito como juicio $new_width>$src_width && $new_height>$src_width
3: Excluye los dos tipos 1 y 2, es decir, la situación de acercar y alejar al mismo tiempo más el juicio de igualdad. Para 1 y 2, los códigos de procesamiento de funciones son exactamente los mismos, por lo que se pueden resumir. en una declaración de procesamiento
para dar el código de implementación PHP
<?php
/*
*Descripción: La función es recortar una imagen a una imagen de cualquier tamaño sin deformar la imagen.
* Descripción del parámetro: ingrese el nombre del archivo de la imagen a procesar, genere el nombre del archivo guardado de la nueva imagen, genere el ancho de la nueva imagen y genere la altura de la nueva imagen.
* escrito por pollo pequeño
* hora 2008-12-18
*/
// Obtenga una imagen de cualquier tamaño, estire las partes que faltan, sin deformaciones, sin espacios en blanco
función my_image_resize($src_file, $dst_file, $new_width, $new_height) {
if($nuevo_ancho <1 || $nuevo_alto <1) {
echo "error de ancho o alto de parámetros!";
salida();
}
si(!file_exists($src_file)) {
echo $src_file "no existe!";
salida();
}
//tipo de imagen
$tipo=exif_imagetype($src_file);
$support_type=array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);
if(!in_array($tipo, $tipo_soporte,verdadero)) {
echo "¡este tipo de imagen no es compatible! Solo se admite jpg, gif o png";
salida();
}
//Cargar imagen
cambiar($tipo) {
caso IMAGETYPE_JPEG:
$src_img=imagecreatefromjpeg($src_file);
romper;
caso IMAGETYPE_PNG:
$src_img=imagecreatefrompng($src_file);
romper;
caso IMAGETYPE_GIF:
$src_img=imagecreatefromgif($src_file);
romper;
por defecto:
echo "¡Error al cargar la imagen!";
salida();
}
$w=imagenesx($src_img);
$h=imagesy($src_img);
$ratio_w=1.0 * $nuevo_ancho / $w;
$ratio_h=1.0 * $nueva_altura / $h;
$relación=1,0;
// La altura y el ancho de la imagen generada son más pequeños o más grandes que los originales. El principio es ampliar en una proporción grande y reducir en una proporción grande (la proporción reducida será más pequeña).
if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) {
si($ratio_w < $ratio_h) {
$ratio = $ratio_h // Caso 1, la relación de ancho es menor que la dirección de altura, recorta o amplía según el estándar de relación de altura
}demás {
$ratio = $ratio_w ;
}
// Defina una imagen temporal intermedia cuya relación de aspecto cumpla exactamente con los requisitos del objetivo
$inter_w=(int)($new_width / $ratio);
$inter_h=(int) ($nueva_altura / $relación);
$inter_img=imagecreatetruecolor($inter_w, $inter_h);
copia de imagen($inter_img, $src_img, 0,0,0,0,$inter_w,$inter_h);
// Genera una imagen temporal con la longitud máxima del lado como la imagen de destino $ratio ratio
//Definir una nueva imagen
$new_img=imagecreatetruecolor($new_width,$new_height);
imagecopyresampled($new_img,$inter_img,0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
cambiar($tipo) {
caso IMAGETYPE_JPEG:
imagejpeg($new_img, $dst_file,100); // Almacenar imagen
romper;
caso IMAGETYPE_PNG:
imagenpng($new_img,$dst_file,100);
romper;
caso IMAGETYPE_GIF:
imagegif($new_img,$dst_file,100);
romper;
por defecto:
romper;
}
} // terminar si 1
// 2 Un lado de la imagen de destino es más grande que la imagen original y un lado es más pequeño que la imagen original Primero amplíe la imagen normal y luego recórtela.
// =si( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) )
demás{
$ratio=$ratio_h>$ratio_w? $ratio_h : $ratio_w //Toma el valor con la proporción mayor;
// Defina una imagen grande en el medio, la altura o el ancho de la imagen es igual a la imagen de destino y luego amplía la imagen original
$inter_w=(int)($w * $relación);
$inter_h=(int) ($h * $relación);
$inter_img=imagecreatetruecolor($inter_w, $inter_h);
//Recorta la imagen original después de escalarla
imagecopyresampled($inter_img,$src_img,0,0,0,0,$inter_w,$inter_h,$w,$h);
//Definir una nueva imagen
$new_img=imagecreatetruecolor($new_width,$new_height);
copia de imagen($new_img, $inter_img, 0,0,0,0,$new_width,$new_height);
cambiar($tipo) {
caso IMAGETYPE_JPEG:
imagejpeg($new_img, $dst_file,100); // Almacenar imagen
romper;
caso IMAGETYPE_PNG:
imagenpng($new_img,$dst_file,100);
romper;
caso IMAGETYPE_GIF:
imagegif($new_img,$dst_file,100);
romper;
por defecto:
romper;
}
}//si3
}// función final
?>