Ir ao conteúdo

PHP Erro ao tentar compactar imagens com PHP.


Ir à solução Resolvido por lgwebforum,

Posts recomendados

Postado

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?

Postado

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.

Postado

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.
 

 

Postado

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
  • Solução
Postado

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);
}
}
?>

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!