Estou querendo escrever um código PHP que redimensiona automaticamente qualquer imagem carregada por meio de um formulário para 147x147px, mas não tenho ideia de como fazer isso (sou relativamente novato em PHP).
Até agora, carreguei imagens com sucesso, tipos de arquivos sendo reconhecidos e nomes limpos, mas gostaria de adicionar a funcionalidade de redimensionamento ao código. Por exemplo, eu tenho uma imagem de teste que tem 2,3 MB e 1331 x 1331 de dimensão e gostaria que o código diminuísse, o que suponho que comprimirá drasticamente o tamanho do arquivo da imagem também.
Até agora, tenho o seguinte:
if ($_FILES) {
//Put file properties into variables
$file_name = $_FILES['profile-image']['name'];
$file_size = $_FILES['profile-image']['size'];
$file_tmp_name = $_FILES['profile-image']['tmp_name'];
//Determine filetype
switch ($_FILES['profile-image']['type']) {
case 'image/jpeg': $ext = "jpg"; break;
case 'image/png': $ext = "png"; break;
default: $ext = ''; break;
}
if ($ext) {
//Check filesize
if ($file_size < 500000) {
//Process file - clean up filename and move to safe location
$n = "$file_name";
$n = ereg_replace("[^A-Za-z0-9.]", "", $n);
$n = strtolower($n);
$n = "avatars/$n";
move_uploaded_file($file_tmp_name, $n);
} else {
$bad_message = "Please ensure your chosen file is less than 5MB.";
}
} else {
$bad_message = "Please ensure your image is of filetype .jpg or.png.";
}
}
$query = "INSERT INTO users (image) VALUES ('$n')";
mysql_query($query) or die("Insert failed. " . mysql_error() . "<br />" . $query);
php
image-processing
image-resizing
image-upload
Alex Ryans
fonte
fonte
upload_max_filesize
emphp.ini
primeiro lugar é possível carregar o arquivo com um tamanho maior queupload_max_filesize
?. Existe alguma chance de redimensionar a imagem para um tamanho maior queupload_max_filesize
? sem alterarupload_max_filesize
emphp.ini
Respostas:
Você precisa usar as funções ImageMagick ou GD do PHP para trabalhar com imagens.
Com o GD, por exemplo, é tão simples quanto ...
E você pode chamar esta função, assim ...
Por experiência pessoal, a reamostragem de imagem do GD também reduz drasticamente o tamanho do arquivo, especialmente ao reamostrar imagens brutas de câmeras digitais.
fonte
BLOB
s? Eu recomendaria armazenar imagens no sistema de arquivos e inserir referências em seu banco de dados. Também recomendo a leitura da documentação completa do GD (ou ImageMagick) para ver quais outras opções você tem disponíveis.abs()
, gosteceil($width-($width*abs($r-$w/$h)))
e igual à parte da altura. É necessário em alguns casos.imagejpeg($dst, $file);
após aimagecopyresampled($dst,...
linha. Altere$file
se não quiser substituir o original.Este recurso(link quebrado) também vale a pena considerar - alguns códigos bem organizados que usam GD. No entanto, eu modifiquei seu trecho de código final para criar esta função que atende aos requisitos de OPs ...Você também precisará incluir este arquivo PHP ...
fonte
Função simples de usar PHP ( imagescale ):
Sintaxe:
Exemplo:
Etapa: 1 Leia o arquivo
Etapa: 2: carregar o arquivo de imagem
Etapa: 3: Nosso salva-vidas vem em '_' | Dimensione a imagem
Nota: imagescale funcionará para (PHP 5> = 5.5.0, PHP 7)
Fonte: Clique para ler mais
fonte
Se você não se preocupa com a relação de aspecto (ou seja, você deseja forçar a imagem para uma dimensão específica), aqui está uma resposta simplificada
Agora vamos cuidar da parte do upload. Primeiro passo, carregue o arquivo no diretório desejado. Em seguida, chame uma das funções acima com base no tipo de arquivo (jpg, png ou gif) e passe o caminho absoluto do seu arquivo enviado conforme abaixo:
O valor de retorno
$img
é um objeto de recurso. Podemos salvar em um novo local ou substituir o original conforme abaixo:Espero que isso ajude alguém. Verifique estes links para mais informações sobre redimensionamento de Imagick :: resizeImage e imagejpeg ()
fonte
upload_max_filesize
emphp.ini
primeiro lugar você não pode carregar o arquivo com tamanho superior aupload_max_filesize
. Existe alguma chance para redimensionar a imagem de tamanho mais do queupload_max_filesize
, sem alterarupload_max_filesize
emphp.ini
Espero que funcione para você.
fonte
( IMPORTANTE : no caso de redimensionamento de animação (webp ou gif animado), o resultado será uma imagem não animada, mas redimensionada do primeiro quadro! (A animação original permanece intacta ...)
Eu criei isso no meu projeto php 7.2 (exemplo imagebmp sure (PHP 7> = 7.2.0): php / manual / function.imagebmp ) sobre techfry.com/php-tutorial , com GD2, (então nada de biblioteca de terceiros) e muito semelhante à resposta de Nico Bistolfi, mas funciona com todos os cinco tipos básicos de imagem ( png, jpeg, webp, bmp e gif ), criando um novo arquivo redimensionado, sem modificar o original, e tudo em uma função e pronto para usar (copie e cole no seu projeto). (Você pode definir a extensão do novo arquivo com o quinto parâmetro, ou apenas deixá-lo, se quiser manter o original):
fonte
.cr2, .dng, .nef
e similares)? GD2 não tem nenhum suporte e depois de muita luta consegui configurar o ImageMagick. Mas, ele falha com erro de tempo limite de conexão ao ler o arquivo. E, também não há registro de erros ..Criei uma biblioteca fácil de usar para redimensionar imagens. Ele pode ser encontrado aqui no Github .
Um exemplo de como usar a biblioteca:
Outros recursos, caso você precise deles, são:
fonte
Aqui está uma versão estendida da resposta que @Ian Atkin 'deu. Achei que funcionou extremamente bem. Para imagens maiores, isto é :). Você pode realmente tornar as imagens menores maiores se não tiver cuidado. Mudanças: - Suporta arquivos jpg, jpeg, png, gif, bmp - Preserva a transparência para .png e .gif - Verifica duas vezes se o tamanho do original já não é menor - Substitui a imagem fornecida diretamente (é o que eu precisava)
Então aqui está. Os valores padrão da função são a "regra de ouro"
fonte
$w === $width && $h === $height
. Pense nisso. Deve ser>=
e>=
comparações. @DanielBolo ZF:
fonte
Eu encontrei uma maneira matemática de fazer este trabalho
Github repo - https://github.com/gayanSandamal/easy-php-image-resizer
Exemplo ao vivo - https://plugins.nayague.com/easy-php-image-resizer/
fonte
Você pode experimentar a biblioteca PHP TinyPNG. Usando esta biblioteca, sua imagem é otimizada automaticamente durante o processo de redimensionamento. Tudo o que você precisa para instalar a biblioteca e obter uma chave de API em https://tinypng.com/developers . Para instalar uma biblioteca, execute o comando abaixo.
Depois disso, seu código é o seguinte.
Eu escrevi um blog sobre o mesmo tópico http://artisansweb.net/resize-image-php-using-tinypng
fonte
Eu sugeriria uma maneira fácil:
fonte
}
Esta é uma solução adaptada com base nesta grande explicação. Esse cara deu uma explicação passo a passo. Espero que todos gostem.
fonte