Reduzir o tamanho de avatares de usuários? - miniaturas criando
-
18-09-2019 - |
Pergunta
Usuário do meu site upload de imagens que são usados ??como avatares. Tenho definir um tamanho limite de upload de 2 MB. Na maioria dos lugares que eu só exigem miniaturas. Mas os usuários fazer upload de imagens com resoluções muito maiores. Eu armazenar esses arquivos no meu sistema de arquivos.
Como posso criar miniaturas e armazená-los em vez de grandes arquivos de tamanho?
Solução
Dependendo da configuração de instalação / servidor, você tem várias possibilidades.
- Você pode usar o GD biblioteca, e algo como a sua
imagecopyresized
função - Ou você poderia usar o
Imagick extension
, e algo como a suathumbnailImage
método.
Eu diria que eu tenho bastante nunca visto um servidor sem GD instalada - para Imagick, o menos provável de ser instalado por padrão: - (
Outra solução poderia ser a de chamar a href="http://www.imagemagick.org/script/convert.php" rel="nofollow noreferrer"> utilitário de conversão de linha de comando (que vem com ImageMagick - de forma independente de qualquer extensão PHP) , usando algo como exec
para chamá-lo.
Advantage, com isso, seria que você não seria limitada pela memory_limit
, como o redimensionamento seria realizada por uma ferramenta externa - mas, é claro, isso também significa que sua aplicação vai contar com uma ferramenta externa, que nem sempre é bom ...
Se necessário, há uma abundância de tutoriais sobre GD; por exemplo, aqueles que possam interessar-lhe:
- Como criar miniaturas com PHP e GD : ele usa um processo em lote para gerar miniaturas para muitas imagens - que podem ser úteis se você tem que gerar miniaturas de todas as imagens que você já tem
- Thumbnail geração com PHP tutorial :. faz algumas coisas muitas vezes não é visto, como criar miniaturas quadrados, centrando a imagem orignal e adicionando um pouco de cor de fundo
Outras dicas
Você pode usar o GD módulo ou o ImageMagick módulo para redimensionar e reduzir quaisquer imagens enviadas.
Se você google em torno de algo como "PHP imagem resizer", você vai encontrar muitos exemplos. I tendem a usar GD, como eu tenho um velho pedaço de código chutando em torno que funciona muito bem. Supondo que você tenha uma imagem JPEG carregado conhecida encontrada em $srcImgPath
, você poderia fazer algo como o seguinte, onde $newWidth
e $newHeight
são os novos tamanhos de imagem que deseja:
list($width, $height, $type) = getimagesize($srcImgPath);
$srcImg = imagecreatefromjpeg($srcImgPath);
if ($srcImg === false) return false;
$workImg = imagecreatetruecolor($newWidth,$newHeight);
imagecopyresampled($workImg,$srcImg,0,0,0,0,$newWidth,$newHeight,$width,$height);
imagejpeg($workImg,$newFilename,$quality);
funcionalizar conforme apropriado, e certifique-se de especificar o $quality
. Você pode abstrair este código para gifs punho e pngs muito facilmente também.
Confira a biblioteca gd, especificamente o imagecopyresized função
Apenas uma nota rápida, se você descer a rota GD, use imagecopyresampled, uma vez que produz imagens mais limpas olhando. Por isso, quero dizer que não ficará tão granulado e / ou pixely.
Link para o manual do PHP na função: http: // us2. php.net/manual/en/function.imagecopyresampled.php
Eu recomendaria o script timthumb.php. é rocha sólida. http://www.darrenhoyt.com/2008/04 / 02 / /
timthumb-php-lançado-scriptSe você tem Imagick instalado na sua configuração do PHP. Depois, há uma função que faz isso. Imagick :: thumbnailImage ()
Se você não tem Imagick, em seguida, a biblioteca GD virá a calhar. Uma vez que eles têm imagcopyresized ()
Não é Google AppEngine equipado com um subconjunto de PIL? Não é a função 'redimensionamento' que poderia ser usado ... eo melhor de tudo, você está recebendo uma cota livre!