Ao fazer uma imagem de chamada de home page, às vezes é necessário obter uma imagem de tamanho fixo, pois a posição da imagem da home page geralmente é especificada pelo designer se for para chamar a imagem de lançamento mais recente, pois não se sabe qual. proporção da imagem que o cliente carregará, portanto, às vezes não há como determinar a proporção da imagem. Os redatores de páginas front-end geralmente usam um método para fixar a altura e a largura do elemento img para evitar que a imagem transborde. Porém, se a proporção da imagem não for a necessária, a imagem ficará deformada após ser chamada. Uma solução é dimensioná-la de acordo com a proporção da imagem original. A imagem dimensionada inevitavelmente terá espaços em branco. Preencha os espaços em branco com cores. Desta forma, embora a imagem não fique deformada, haverá muita distorção, por exemplo, se o usuário enviar uma imagem muito. alto, mas tem uma largura média e, se for compactado em uma imagem 1:1, a imagem basicamente não ficará visível após a compactação.
Minha solução aqui é cortar qualquer imagem em um tamanho fixo, a imagem não será deformada e o espaço em branco será esticado e preenchido. A imagem sempre será preenchida sem nenhum espaço em branco. garante que a chamada de imagem não será deformada. Para um quadro de imagem de saída de tamanho fixo, a imagem de origem apresenta as seguintes situações:
1: A altura e a largura da imagem a ser produzida são menores que a altura e a largura da imagem de origem, escrita como julgamento $new_width<$src_width && $new_height<$src_width
2: A altura e largura da imagem a ser produzida são maiores que a altura e largura da imagem original, escrita como julgamento $new_width>$src_width && $new_height>$src_width
3: Exclua os dois tipos 1 e 2, ou seja, a situação de aumentar e diminuir o zoom ao mesmo tempo mais o julgamento de igualdade. Para 1 e 2, os códigos de processamento da função são exatamente os mesmos, portanto podem ser resumidos. em uma instrução de processamento
para fornecer o código de implementação do PHP
<?php
/*
*Descrição: A função é recortar uma imagem em uma imagem de qualquer tamanho sem deformar a imagem.
* Descrição do parâmetro: Insira o nome do arquivo da imagem a ser processada, gere o nome do arquivo salvo da nova imagem, gere a largura da nova imagem e gere a altura da nova imagem.
* escrito por smallchicken
* horário 18/12/2008
*/
// Obtenha uma imagem de qualquer tamanho, estique as partes que faltam, sem deformação, sem espaço em branco
função minha_imagem_resize($src_file, $dst_file, $new_width, $new_height) {
if($nova_largura <1 || $nova_altura <1) {
echo "erro de largura ou altura de parâmetros!";
saída();
}
if(!file_exists($src_file)) {
echo $src_file "não existe!";
saída();
}
//Tipo de imagem
$type=exif_imagetype($src_file);
$support_type=array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);
if(!in_array($type, $support_type,true)) {
echo "este tipo de imagem não suporta! suporta apenas jpg, gif ou png";
saída();
}
//Carrega imagem
switch($tipo) {
caso IMAGETYPE_JPEG:
$src_img=imagecreatefromjpeg($src_file);
quebrar;
caso IMAGETYPE_PNG:
$src_img=imagecreatefrompng($src_file);
quebrar;
caso IMAGETYPE_GIF:
$src_img=imagecreatefromgif($src_file);
quebrar;
padrão:
echo "Erro ao carregar imagem!";
saída();
}
$w=imagensx($src_img);
$h=imagensy($src_img);
$ proporção_w = 1,0 * $ new_width / $ w;
$ proporção_h = 1,0 * $ nova_altura / $ h;
$razão=1,0;
// A altura e a largura da imagem gerada são menores ou maiores que as originais. O princípio é ampliar em uma proporção grande e reduzir em uma proporção grande (a proporção reduzida será menor).
if(($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) {
if($proporção_w < $proporção_h) {
$ratio = $ratio_h ; // Caso 1, a proporção da largura é menor que a direção da altura, corte ou amplie de acordo com o padrão de proporção de altura
}outro {
$ proporção = $ proporção_w ;
}
// Define uma imagem temporária intermediária cuja proporção atende exatamente aos requisitos alvo
$inter_w=(int)($nova_largura / $razão);
$inter_h=(int) ($nova_altura / $proporção);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
cópia de imagem($inter_img, $src_img, 0,0,0,0,$inter_w,$inter_h);
// Gera uma imagem temporária com o comprimento lateral máximo da imagem alvo $ratio ratio
//Define uma nova imagem
$new_img=imagecreatetruecolor($new_width,$new_height);
imagemcopyresampled($new_img,$inter_img,0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
switch($tipo) {
caso IMAGETYPE_JPEG:
imagejpeg($new_img, $dst_file,100);
quebrar;
caso IMAGETYPE_PNG:
imagempng($new_img,$dst_file,100);
quebrar;
caso IMAGETYPE_GIF:
imagemgif($new_img,$dst_file,100);
quebrar;
padrão:
quebrar;
}
} //fim se 1
// 2 Um lado da imagem alvo é maior que a imagem original e um lado é menor que a imagem original Primeiro aumente a imagem comum e depois recorte-a.
// =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) )
outro{
$ratio=$ratio_h>$ratio_w? $ratio_h : $ratio_w;
//Defina uma imagem grande no meio, a altura ou largura da imagem seja igual à imagem alvo e depois aumente a imagem original
$inter_w=(int)($w * $razão);
$inter_h=(int) ($h * $razão);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
//Corta a imagem original depois de dimensioná-la
imagemcopyresampled($inter_img,$src_img,0,0,0,0,$inter_w,$inter_h,$w,$h);
//Define uma nova imagem
$new_img=imagecreatetruecolor($new_width,$new_height);
cópia de imagem($new_img, $inter_img, 0,0,0,0,$new_width,$new_height);
switch($tipo) {
caso IMAGETYPE_JPEG:
imagejpeg($new_img, $dst_file,100);
quebrar;
caso IMAGETYPE_PNG:
imagempng($new_img,$dst_file,100);
quebrar;
caso IMAGETYPE_GIF:
imagemgif($new_img,$dst_file,100);
quebrar;
padrão:
quebrar;
}
}//se3
} // fim da função
?>