Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal.
Geralmente eu gero uma miniatura da imagem ao fazer o upload da mesma.
Mas estou com um caso que o cliente já tem as imagens grandes.
Eu preciso gerar a miniatura delas (thumb) para melhorar o carregamento do site (é um catálogo eletrônico).
Existem n formas para isso.
Alguém já teve um caso assim para dar uma ideia do que fazer?
Obrigado!
Obrigado pela dica, mas ainda vou precisar de outra solução.
É linux (está na Hostgator), mas não tenho acesso ao Linux, nem para instalar o Imagick.
@Rogerio Pancini, você provavelmente pode (e deveria) usar o imagick sim. Me acompanhe:
Matheuzão, uma curiosidade, eu não cheguei a entrar em contato com o suporte pra rodar o imagick ainda, pq eu tinha encontrado a solução pras minhas logos usando imagens no formato SVG, mas eu baixei a biblioteca do imagick pra dar uma estudada no código e fiquei curioso com uma coisa: é possível eu mesmo instalar essa biblioteca na minha hospedagem e utilizar ela? Digo isso pq aparentemente a equipe do imagick disponibilizou o código completo lá no github deles.
Olá @BrunoBit.
O código deles está disponível sim, pois é código-livre/aberto, mas ele não é escrito em PHP (é em C, se não me engano).
Por esse motivo você não pode instalar... mas como disse, é muito tranquilo que eles instalem, ainda mais em uma empresa grande como a HostGator, como é no caso do @Rogerio Pancini.
De qualquer forma, Rogerio, não havendo essa possibilidade, use a biblioteca GD. Também é uma boa opção para o que você precisa e essa muitíssimo provavelmente está instalada por padrão...
@Matheus Tavares o que eu peguei aqui praticamente 85% é tudo php, o resto é js,css,scss, json, xml e sh.
Dá uma olhada no git:
https://github.com/Danack/Imagick-demos
Esse git aí eu peguei lá no site deles em Source Code.
Pessoa, parti para uma opção 2 que instalar o ImageMagick na minha máquina.
Deu certo.
Vou redimensionar aqui e depois copio para a hospedagem.
Agora para fazer tal tarefa, seria algo assim que posso fazer? (Ainda não rodei, somente tive a ideia, baseada no script "getImageGeometry").
$sql_1 = mysqli_query($config, "SELECT id_prod, imagem_grd FROM tb_empresas_imagem") or die(mysqli_error($config));
if(@mysqli_num_rows($sql_1) <= '0'){
echo "<p>$info</p>";
}else{
while($r_sql_1 = mysqli_fetch_array($sql_1)){
$id_produto = $r_sql_1[0];
$imagem_grande = $r_sql_1[1];
$im = new imagick("D:\\xampp\\htdocs\\projetos\\cliente\\images\\produtos\\{$imagem_grande}");
$imageprops = $im->getImageGeometry();
$width = $imageprops['width'];
$height = $imageprops['height'];
if($width > $height){
$newHeight = 250;
$newWidth = (250 / $height) * $width;
}else{
$newWidth = 250;
$newHeight = (250 / $width) * $height;
}
$im->resizeImage($newWidth,$newHeight, imagick::FILTER_LANCZOS, 0.9, true);
$im->cropImage (250,250,0,0);
$cad_img_peq = md5(uniqid(rand(), true)).".jpg";
$im->writeImage( "D:\\xampp\\htdocs\\projetos\\cliente\\images\\produtos\\{$cad_img_peq}" );
$imagens_pequenas = mysqli_query($config, "UPDATE tb_empresas_imagens SET imagem_peq = '$cad_img_peq' WHERE id_prod = '$id_produto'") or die(mysqli_error($config));
if($imagens_pequenas >= '1'){
echo "Sucesso";
}else{
echo "Erro";
}
}
}@BrunoBit, esse repositório não é do imagick, mas de "exemplos do imagick".
O do imagick é esse: https://github.com/mkoppanen/imagick
E do ImageMagick é esse: https://github.com/ImageMagick/ImageMagick
Não dá pra criar extensões do PHP escritos em PHP (pois isso seria apenas um pacote PHP e não uma extensão)
@Rogerio Pancini, há muitas imagens nesse site?
Haveria a possibilidade de você baixar tudo na sua máquina?
Assim você evita de cometer algum engano no código e perder as imagens por qualquer razão.
Daí você colocaria todas numa pasta, leria todo o conteúdo (arquivos) dessa pasta usando glob(), processaria e enviaria as miniaturas depois.
Enviar de volta seria tranquilo, pois os arquivos seriam minúsculos...
1.506 imagens.
Exato, vou baixar tudo na minha máquina, redimensionar, e depois subir as miniaturas.
Ai gostaria de uma opinião sobre o código que fiz, se está muito errado ou se está bom assim.
Obrigado!
>
2 horas atrás, Rogerio Pancini disse:
Alguém já teve um caso assim para dar uma ideia do que fazer?
É bem tranquilo fazer isso com ImageMagick.
Isso levando em conta que o servidor é Linux e você tem acesso SSH (pois você consegue processar imagens em lote e alcançar seu objetivo com apenas um comando simples no terminal, vide links acima).
Mas caso não tenha esse acesso ou não tenha experiência com Linux/terminal, beleza... você ainda pode usar o ImageMagick pelo PHP (nesse caso abstraído em uma extensão chamada imagick).
Veja como é fácil: http://phpimagick.com/Imagick/scaleImage
scaleImage é só um exemplo. Navegue no menu desse site pra ver as outras alternativas. Essa lib é poderosa.