Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rafael Aranha

Script não redimensiona imagem muito grande

Recommended Posts

Fala pessoal, tudo bem?

 

Tenho um script em PHP que uso para redimensionar imagens.

 

O problema é que, aparentemente, ele não está redimensionando imagens com mais 3bm! ou com resolução muito alta.

 

Ele redimensiona sem problemas qualquer imagem menor que 3mb, ou com resoluções menores.

 

Já coloquei na página os init_set desta forma:

 

ini_set('memory_limit','300M');

ini_set('post_max_size','150M');

ini_set('upload_max_filesize','100M');

ini_set('max_execution_time','0');

ini_set('session.gc_maxlifetime','3600');

 

Creio que funciona, já que o upload de imagens grandes não gera nenhum problema. O problema está em redimensionar as imagens!

 

O script está aqui:

 

<?php

$larg = $_GET['larg'];
$alt = $_GET['alt'];

// recebendo a url da imagem
$filename = $_GET['img'];
$percent = 0.10;

// Cabeçalho que ira definir a saida da pagina
header('Content-type: image/jpeg');

// pegando as dimensoes reais da imagem, largura e altura
list($width, $height) = getimagesize($filename);

#setando as proporcoes desejadas
$largura = $larg;
$altura = $alt;

#setando a proporcao da miniatura
if($height > $width) {
$new_height = $altura;
$new_width = $width*$altura/$height;
}else{
$new_width = $largura;
$new_height = $height*$largura/$width;
}

if($new_width > $largura){
$new_width = $largura;
$new_height = $height*$largura/$width;
}

if($new_height > $altura){
$new_height = $altura;
$new_width = $width*$altura/$height;
}

//gerando a a miniatura da imagem
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

//o 3º argumento é a qualidade da imagem de 0 a 100
imagejpeg($image_p, null, 100);
imagedestroy($image_p);
?>

 

Será que alguem consegue me dar uma luz???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra que isso ?

 

 

$largura = $larg;

$altura = $alt;

 

 

A largura e altura são recebidas por GET lá em cima.

 

Para inserir a imagem eu uso:

<img src="thumb.php?img=imagem.jpg&larg=100&alt=100" />

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu script não tem nenhum retorno $largura/$altura, então por que colocar variavel com valor sendo outra variavel ?

 

 

Enfim, é só trocar:

 

$largura = $larg;

$altura = $alt;

 

por

 

$largura = $_GET['larg'];

$altura = $_GET['alt'];

 

Isso não vai alterar em nada o script e também não vai resolver o meu problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

configure o php para exibir todas as mensagens de erro

 

se puder também configure para gerar logs dos erros

Compartilhar este post


Link para o post
Compartilhar em outros sites

configure o php para exibir todas as mensagens de erro

 

se puder também configure para gerar logs dos erros

 

Configurei o PHP para mostrar todos os erros e também gerar logs, mas ele não gera nenhum erro referente ao meu problema! Quando carrego a página com este script, nenhum erro é gerado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

apenas para confirmar, poderia postar aqui como fez as configurações para gerar os logs e para exibir os erros?

 

nào confunda o log do apache com o log do php.. no php.ini ou usando htaccess é possível definir um path físico para gravar logs de erros do php, que é independente do log de erros do apache ou de qualquer outro webserver que esteja usando.

 

poste também a versão do php, apache, sistema operacional, etc..

Compartilhar este post


Link para o post
Compartilhar em outros sites

apenas para confirmar, poderia postar aqui como fez as configurações para gerar os logs e para exibir os erros?

 

nào confunda o log do apache com o log do php.. no php.ini ou usando htaccess é possível definir um path físico para gravar logs de erros do php, que é independente do log de erros do apache ou de qualquer outro webserver que esteja usando.

 

poste também a versão do php, apache, sistema operacional, etc..

 

Opa.

 

Para exibir os erros utilizei isso:

 

ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
error_reporting(E_ALL);

 

Como eu faria para gerar esses logs usando htaccess ou algum outro método?

 

Algumas infos do host:

 

Versão Apache 2.2.17

Versão PHP 5.2.17

Versão MySQL 5.0.92-community

Arquitetura i686

Sistema operacional linux

Versão Perl 5.8.8

Versão Kernel 2.6.18-194.32.1.el5PAE

Compartilhar este post


Link para o post
Compartilhar em outros sites

está ok

 

1. verifique se o arquivo error_log.txt possui permissões adequadas para leitura e escrita. Pode ser que não esteja gravando os logs por falta de permissões.

Para testar se as permissões estão ok, você pode forçar um erro qualquer. O erro deverá aparecer no log.

Por exemplo, para forçar um erro,

<?php
echo funcao_inexistente();
?>

pode rodar exatamente isso, apenas para gerar erro e ver se o log está gravando mesmo.

 

 

 

dica para configurar no .htaccess

 

# PHP error handling for development servers
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log /www/websites/seusite.com/logs/php/PHP_errors-201109.log
# [see footnote 3] # php_value error_reporting 999999999
php_value error_reporting -1
php_value log_errors_max_len 0

* obviamente em "php_value error_log" você deve trocar pelo caminho físico absoluto..

 

 

Verifique também se o php está em safe_mode ou não. Apesar de que isso, acho que não tem relevância para o caso, mas verifique.

 

 

 

 

se não encontrarmos nada anormal até aqui, vamos tentar criar breakpoints no script que faz o redimensionamento.

 

 

 

off

se for possível atualize o php e o mysql

 

o recomendado é o atual php 5.3.8, pois o 5.2 está descontinuado, portanto não terá suporte ou garantia alguma.

o mysql mudou muito na parte da engine do 5.1 para o 5.5, o ganho de performance em ambiente windows passa de 500% em relação a versões anteriores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom,

 

Muito obrigado pelas dicas, depois de fazer os testes que pediu e me toquei de uma coisa:

 

Eu coloco os init_set no arquivo de conexão do mysql, e incluo no index.php. As páginas rodam sempre no index.

 

O problema é que o arquivo onde estão os scripts de upload e redimensionamento rodam fora do index, logo ele não reconhece as configurações dos init_sets!

 

Então eu coloque os init_set também neste arquivo... e voilá! Funcionou perfeitamente!! Redimensionou logo depois do upload sem problemas.

 

No fim o problema era bem mais simples do que imaginava...

 

 

Aproveitando, você comentou sobre as versões que uso no host. Mas para atualizar, eu dependo dos administradores dele, correto? Ou eu mesmo consigo atualizar de alguma forma?

 

 

Mais uma vez, muito obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

quanto ao update no host, creio que não seja possível

 

há hosts mais modernos que mesmo compartilhados permitem a troca de ambientes sem comprometer outros clientes..

mas veja com o seu host e negocie.. é até melhor para eles.

 

talvez até eles saibam que é necessário atualizar, no entanto, depende muito da estrutura que possuem... é compreensível.

 

falowss

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.