Ir ao conteúdo
  • Cadastre-se
lgwebforum

PHP RESOLVIDO Erro ao tentar compactar imagens com PHP.

Recommended Posts

Olá a todos, 
Estou recebendo um erro estranho ao tentar compactar uma imagem pelo php usando a função "GD".

abaixo documentação. 
http://php.net/manual/pt_BR/book.image.php

Vejam o erro:

Warning: imagejpeg() expects parameter 1 to be resource, null given in /home/mucur615/public_html/delaitv.com/imgcompact.php on line 10

 

Este é o código em questão:

<?php
ini_set('memory_limit', '-1'); /*resolvendo o erro de falta de memoria*/
function compressImage($source_path, $destination_path, $quality) {
    $info = getimagesize($source_path);
    if ($info['mime'] == 'image/jpg') { /*mudei de jpeg para jpg*/
        $image = imagecreatefromjpeg($source_path);
    } elseif ($info['mime'] == 'image/png') {
        $image = imagecreatefrompng($source_path);
    }
    imagejpeg($image, $destination_path, $quality);
    return $destination_path; 
}
$img = compressImage("xb/web/midia/foto.jpg", "xb/web/midia/foto2.jpg", 6);
?>

 

Alguém tem ideia do que pode estar causando o erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!
Aparentemente, a variável $image não é/contém um image resource, ela está sendo considerada como null
tente:
1) Acima do ini_set(... acrescente: error_reporting(E_ALL);
2) Certifique-se de que $info['mime'] possui um dos dois possíveis valores definidos no script e se não tiver, mostre uma mensagem dizendo que a imagem não é de nenhum tipo aceito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá washalbano. 

Obrigado pela ajuda. 

Veja, na minha explicação não postado o erro por completo:
Eu corrigi la em cima, ele diz que o erro estava na linha 10

Warning: imagejpeg() expects parameter 1 to be resource, null given in /home/mucur615/public_html/delaitv.com/imgcompact.php on line 10


01) Seguindo sua dica, adicionei " error_reporting(E_ALL);" no início. logo após a abertura da tag php, e apresenstou estes erros:

Notice: Undefined variable: image in /home/mucur615/public_html/delaitv.com/imgcompact.php on line 11

Warning: imagejpeg() expects parameter 1 to be resource, null given in /home/mucur615/public_html/delaitv.com/imgcompact.php on line 11

 

02) Sobre sua segunda sugestão, eu não compreendi o que deveria fazer exatamente. se puder me ajudar fico grato.
 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

Com o erro que apareceu agora, já sabemos o que aconteceu.
veja:

1 hora atrás, lgwebforum disse:

Notice: Undefined variable: image in /home/mucur615/

O trecho acima diz que a variável $image não foi definida. Ela não existe

Então vamos pra sugestão 2)

17 horas atrás, lgwebforum disse:

if ($info['mime'] == 'image/jpg') { 
  /*mudei de jpeg para jpg*/        
$image = imagecreatefromjpeg($source_path);     
} elseif ($info['mime'] == 'image/png') {         
$image = imagecreatefrompng($source_path);    
}

 

A variável $image só vai ser criada se e somete se $info['mime'] tiver valor igual a 'image/(jpg|png)'
se $info['mime'] tiver um valor diferente, a variável $image não vai existir(não vai ser criada)!

Logo, segue sugestão pra quando isso acontecer:
 

<?php
//...
if ($info['mime'] == 'image/jpg') { /*mudei de jpeg para jpg*/
   $image = imagecreatefromjpeg($source_path);
} elseif ($info['mime'] == 'image/png') {
   $image = imagecreatefrompng($source_path);
} else { // se $info['mime'] não for igual a image/jpg nem image/png
  // mostra mensagem na tela
  echo '<p>O mime type do arquivo enviado não é válido!<br>Envie um arquivo com mime igual a image/jpg ou image/png</p>';
  // encerra o script mostrando o $info['mime'] do arquivo enviado
  die('mime enviado: '. $info['mime']);
}
//...

Creio que isso poderá te ajudar a entender o que está acontecendo.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado. 
Consegui fazer funcionar. 
Aparentemente alguns arquivos jpeg apresentam erro e não conseguem ser lidos como jpeg. 
Desta forma, a variável $imagem não era preenchida e mais adiante era apresentado o erro pela falta desta informação.

 

Reescrevi o código que agora faz o seguinte:
* Reduz proporcionalmente a largura da imagem para 800px caso seja maior.
Se for menor mantém as medidas. 
* Verifica automaticamente se é um dos 4 tipos "jpeg, png, gif, bmp" e usa a função adequada.

No caso do gif ele irá perder o movimento.

* Define a nova resolução para 50% da original.
* Aplica as configurações acima em todas os arquivos que iniciem com "ticker"

em meu caso, estes arquivos não tem extensão portando não precisei adicionar.
O arquivo compactado irá substituir o original.

 

<?php
ini_set('memory_limit', '-1'); /*resolvendo o erro de falta de memoria*/

function compressImage($source_path, $destination_path, $quality) {
/* Obtendo informações da imagem */
$size = getimagesize($source_path);
/* Verifica a largura da imagem, caso for maior que 800 será reduzida para 800 */
if ($size[0] > 800){
   $new_width = "800";
/* Caso seja menor a largura original será mantida */
} else ($new_width = $size[0]);
/* Obtendo a altura proporcional a nova largura */
$new_height = ( int )(( $new_width/$size[0] )*$size[1] );
/* Criano a imagem com cores reais e dimensões escolhidas */
$img_true_color = ImageCreateTrueColor( $new_width, $new_height );
/* Verifica o tipo de imagem para usar a função adequada */
if ($size['mime'] == 'image/jpeg') {
   $image = imagecreatefromjpeg($source_path);
} elseif ($size['mime'] == 'image/png') {
   $image = imagecreatefrompng($source_path);
} elseif ($size['mime'] == 'image/gif') {
   $image = imagecreatefromgif($source_path);
} elseif ($size['mime'] == 'image/bmp') {
   $image = imagecreatefrombmp($source_path);
}
/* Criando a imagem redimensionada */
ImageCopyResampled( $img_true_color, $image, 0, 0, 0, 0, $new_width, $new_height, $size[0], $size[1] );
/* Salva a imagem em jpg definindo local+nome e qualidade */
imagejpeg($img_true_color, $destination_path, $quality);
return $destination_path;
/* Limpa da memoria a imagem criada temporáriamente */
ImageDestroy( $img_true_color );
}
/*-------------------*/
/*------- Definindo a pasta das imagens */
$dir_img = "pasta/web/midia_test/";
/* Handler do diretório */
$dh = opendir($dir_img); 
/* loop que busca todos os arquivos que iniciam com "ticker" */
while (false !== ($filename = readdir($dh))) { 
/* Verificando se o arquivo inicia com "ticker" */
if (substr($filename,0,6) == "ticker") { 
echo "$filename <br>";
/* Chama a função para cada arquivo que inicia com "ticker" */ 
$img = compressImage($dir_img.$filename, $dir_img.$filename, 50);
}
}
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×