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?

Foi útil?

Solução

Dependendo da configuração de instalação / servidor, você tem várias possibilidades.

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-script

Se 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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top