Quando desenvolvemos um sistema com upload de fotos envolvendo miniaturas, é muito comum um cliente não gostar dos thumbnails gerados automaticamente pelo PHP, já que todos devem possuir o corte nas mesmas coordenadas X e Y. Existem duas maneiras de resolver o problema: uma é criar um novo campo de upload para que o cliente já mande a miniatura no tamanho certinho. A outra é desenvolver uma interface em javascript para o cliente selecionar, após o upload, a área da foto que ele deseja utilizar na miniatura.
O plugin jCrop que apresento neste artigo facilita a implementação da segunda solução. Além de desenvolver o frontend, vou também mostrar a parte em PHP que redimensiona e recorta a imagem - tudo isso utilizando nossa classe m2brimagem.
Configurações iniciais
Como se trata de um plugin jQuery precisamos da chamada para a biblioteca em algum lugar de nosso HTML. Além disso, vamos precisar também incluir o arquivo fonte do jCrop com sua folha de estilo e imagens necessárias. Clique aqui para fazer o download dos arquivos.
<link href="css/jquery.Jcrop.css" rel="stylesheet" type="text/css" /> <script src="js/jquery.min.js"></script> <script src="js/jquery.Jcrop.js"></script>
Desse jeito já dá pra utilizar o jCrop em sua forma mais básica:
<img src="imagem.jpg" width="634" height="340" id="jcrop" />
<script type="text/javascript">
$(function(){
$('#jcrop').Jcrop();
});
</script>
No exemplo acima, '#jcrop' é o atributo ID da imagem alvo do crop. Você pode utilizar qualquer tipo de seletor do jQuery (classes, sub-elementos etc.), aplicando o frontend do crop em vários elementos img.
Muito legal, mas e pra salvar a imagem? O plugin funciona apenas no cliente, na interface da aplicação. O crop mesmo tem que ser feito no servidor.
Processando o crop com PHP
Primeiramente vamos entender como funciona o jCrop. Seu método de marcação na imagem retorna um array com as dimensões e o posicionamento do crop. Ele possui alguns eventos, aqui vamos utilizar os dois principais: onChange e onSelect. O onChange executa uma função qualquer no momento que a marcação é alterada e o onSelect executa uma função qualquer no momento que a seleção está em andamento.
Sendo assim, vamos utilizar, por enquanto, a função exibePreview em ambos os casos. O que ela faz é atualizar uma pré-visualização do resultado final do crop, além de armazenar as variáveis para envio e processamento no servidor.
function exibePreview( c )
{
// c.x, c.y, c.x2, c.y2, c.w, c.h
};
A função recebe o array c, aquele com as dimensões e coordenadas do crop. Os valores do array são:
| w | largura (width) do crop |
| h | altura (height) do crop |
| x1 e x2 | posições horizontais do crop na imagem |
| y1 e y2 | posições verticais do crop na imagem |
Note que é aí que termina o trabalho do jCrop. Os valores devem ser processados no PHP. No nosso exemplo, conforme mencionei anteriormente, a função exibePreview vai registrar as posições em inputs do tipo hidden no formulário de envio.
function exibePreview( c )
{
// campos hidden que armazenam os valores
$('#x').val(c.x);
$('#y').val(c.y);
$('#x2').val(c.x2);
$('#y2').val(c.y2);
$('#w').val(c.w);
$('#h').val(c.h);
};
Além disso ela deve atualizar a pré-visualização da imagem recortada. Pra isso vamos precisar do tamanho original da imagem. Se você está usando o mesmo formato de imagem, basta utilizar os mesmos valores sempre. No nosso caso, como a imagem é enviada via formulário, utilizamos a função getimagesize do php para retornar a largura (índice 0 do array de retorno) e a altura (índice 1). Elas são necessárias para calcular o posicionamento do crop. A idéia é criar um div com as dimensões do crop, mascarando a imagem original.
function exibePreview(c)
{
var rx = 100 / c.w;
var ry = 100 / c.h;
// atualiza CSS do preview para refletir o tamanho da imagem enviada
// e o posicionamento do crop
$('#preview').css({
width: Math.round(rx * <?php echo $imagesize[0]; ?>) + 'px',
height: Math.round(ry * <?php echo $imagesize[1]; ?>) + 'px',
marginLeft: '-' + Math.round(rx * c.x) + 'px',
marginTop: '-' + Math.round(ry * c.y) + 'px'
});
// campos hidden que armazenam os valores
$('#x').val(c.x);
$('#y').val(c.y);
$('#x2').val(c.x2);
$('#y2').val(c.y2);
$('#w').val(c.w);
$('#h').val(c.h);
}
Com a função exibePreview completa, podemos agora atualizar nossa chamada do jCrop:
$('#jcrop').Jcrop({
onChange: exibePreview,
onSelect: exibePreview,
aspectRatio: 1
});
Note a propriedade aspectRatio, utilizada para amarrar largura e altura do crop, mantendo a proporção.
Tudo OK no frontend. Abaixo você confere o código do formulário de envio e o script para processamento da imagem pós-envio (validação e redimensionamento para evitar arquivos gigantes no crop).
<form name="frm-jcrop" id="frm-jcrop" method="post" action="index.php" enctype="multipart/form-data"> <p> <label>Envie uma imagem:</label> <input type="file" name="imagem" id="imagem" /> <input type="submit" value="Enviar" /> </p> </form>
// processa arquivo
$imagem = isset( $_FILES['imagem'] ) ? $_FILES['imagem'] : NULL;
$img = '';
// verifica se arquivo foi enviado para o servidor
if( $imagem['tmp_name'] )
{
// move arquivo para o servidor
if( move_uploaded_file( $imagem['tmp_name'], $imagem['name'] ) )
{
include( 'm2brimagem.class.php' );
$oImg = new m2brimagem( $imagem['name'] );
if( $oImg->valida() == 'OK' )
{
// redimensiona imagem para evitar arquivos grandes
$oImg->redimensiona( '400', '', '' );
$oImg->grava( $imagem['name'] );
// retorna dimensões da imagem e configura variáveis para o jCrop
$imagesize = getimagesize( $imagem['name'] );
$img = '<img src="'.$imagem['name'].'" id="jcrop" '.$imagesize[3].' />';
$preview = '<img src="'.$imagem['name'].'" id="preview" '.$imagesize[3].' />';
}
else
{
// imagem inválida, exclui do servidor
unlink( $imagem['name'] );
}
}
}
Está quase pronto. Temos um formulário para envio da imagem, e todo o javascript que vai processar o crop e atualizar o nosso preview. Falta o código PHP que vai de fato recortar a imagem enviada. Para isso utilizaremos a classe m2brimagem (leia mais sobre ela aqui).
O processamento será feito via AJAX/post, apenas para agilizar o retorno ao usuário, mas nada impede você de fazer o crop em um novo envio do formulário.
$('#btn-crop').click(function(){
$.post( 'crop.php', {
img:img,
x: $('#x').val(),
y: $('#y').val(),
w: $('#w').val(),
h: $('#h').val()
}, function(){
$('#div-jcrop').html( '<img src="'+img+'?'+Math.random()+'" width ="'+$('#w').val()+'" height ="'+$('#h').val()+'" />' );
});
return false;
});
Uma vez processado, nosso formulário exibirá uma nova tela, com a opção de recortar e salvar um pedaço da imagem enviada. No exemplo você pode observar que, além da imagem e da interface para crop, exibimos também duas janelas adicionais: o preview, já comentado anteriormente; e um pequeno debug, exibindo as informações e coordenadas em tempo real (tudo isso atualizado via exibePreview).
Ao clicar no botão salvar, o usuário executa, via AJAX, o script abaixo, mais uma vez utilizando a classe m2brimagem para o processamento. O script recebe como parâmetro o ponto inicial X e Y do crop, além da largura e altura do mesmo, e cria a versão recortada da imagem original. Após a execução, nosso elemento img é atualizado. Como nesse caso a imagem final possui o mesmo nome da imagem original, utilizamos o "?" com um número randômico (Math.random()) para evitar cache (essa dica é bem legal para sistemas com upload de imagens).
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
include( 'm2brimagem.class.php' );
$oImg = new m2brimagem( $_POST['img'] );
if( $oImg->valida() == 'OK' )
{
$oImg->posicaoCrop( $_POST['x'], $_POST['y'] );
$oImg->redimensiona( $_POST['w'], $_POST['h'], 'crop' );
$oImg->grava( $_POST['img'] );
}
}
exit;
Outras opções
Talvez tudo pareça um pouco confuso olhando os códigos assim de forma separada. Baixe os exemplos que você vai entender melhor. No site do plugin você encontra a documentação completa, em inglês, além de outros exemplos. Uma opção que utilizo bastante é especificar largura e altura fixas. Quando o usuário faz o upload de um avatar, por exemplo, vale a pena limitar o tamanho no jCrop (ou então fazer alguma coisa proporcional). As propriedades minSize e maxSize delimitam a área mínima e máxima do crop.
$('#jcrop').Jcrop({
onChange: exibePreview,
onSelect: exibePreview,
minSize : [ 200, 200 ],
maxSize : [ 200, 200 ],
allowResize : false,
addClass : 'custom'
});
No exemplo acima o crop vai ter sempre 200x200 pixels de dimensão. Além disso configuramos a propriedade allowResize com false, para evitar o redimensionamento da seleção. Outra propriedade legal é a addClass, para definir um estilo personalizado na seleção. No exemplo abaixo a linha fica com uma borda sólida ao invés do pontilhado.
.custom .jcrop-vline, .custom .jcrop-hline {
background: #FF3366;
}
Esse foi o jCrop, um bônus e tanto para a interface dos seus sistemas. Espero que tenham gostado da leitura e qualquer dúvida utilizem a área de comentários abaixo. Até a próxima!

56 comentários.
01/03/2010
06:40
Vinicius Almeida escreveu:
Excelente artigo, como tal só havia visto em inglês! Parabens pelo post e pelo blog como um todo! ^^
Responder
29/03/2010
11:38
Orlando Nogueira escreveu:
Parabéns pelo artigo Davi!
Responder
16/04/2010
08:02
Alan Willms escreveu:
Muito bom!
Responder
04/05/2010
13:31
Diego Ramos escreveu:
Caro Davi, perfeito, se não fosse por um minimo detalhe, o exemplo 2 não funciona no IE. Por acaso vc saberia como solucionar. Att.,
Responder
05/05/2010
05:25
Davi Ferreira escreveu:
Fala Diego, provavelmente é um ponto e vírgula que ficou perdido no final da função exibePreview:
function exibePreview(c){ ... };Responder
05/05/2010
05:58
Diego Ramos escreveu:
Caro Davi, retirei o ponto e virgula do final da function, mas mesmo assim continua a não funcionar no IE. Cara, teria como dar uma olhada pra nós,pois estou muito a fim de reutilizar este seu exemplo,pois ficou excelente! Desde já agradeço sua atenção!
Responder
05/05/2010
12:07
Davi Ferreira escreveu:
Limpou o cache? :) De qualquer forma to sem IE aqui pra testar legal, mas depois dou um novo confere e te respondo. Valeu!
Responder
11/05/2010
04:58
Davi Ferreira escreveu:
Fala Diego! Finalmente consegui parar pra ver esse bug. Pra corrigir é só colocar os campos de coordenadas dentro de uma tag FORM. O IE reclama disso (faz sentido :)). Já corrigi lá no exemplo e no pacote para download. Valeu mesmo!
Responder
24/05/2010
11:37
Diego escreveu:
Que isso eu que te agradeço vlw. Abs
Responder
04/06/2010
16:47
Fabricio escreveu:
Olá, excelente artigo, parabéns. Só me resta uma dúvida, gostaria de saber, como faço para mudar o diretorio que a imagem é salva? Grato, abç.
Responder
28/06/2010
10:37
renato escreveu:
Acabei de achar essa maravilha e tbm passei pela dúvida ai te respondendo eu fiz assim no arquivo crop.php onde faz o corte mudei isso $diretorio = 'galeria/'; $oImg->grava( $diretorio . $_POST['img'] ); fazendo isso ele add a cortada na pasta certa :D espero ter ajudado
Responder
17/07/2010
02:36
Victor Borges escreveu:
Grande Davi, belissimo post! os resultados são espetaculares! estou ralando pra conseguir mudar as dimensões do quadrado do crop! deixar a altura um poquinho maior! mas está dificl! pensei em deixar ele mais light, bem ao estilo orkut msm! sabe? abrindo em uma outra pagina? sabe como fazer isso? se souber me dê uma mão fazendo favor! estou começando agora e preciso muito desse código *-* já testei varios que estão espalhado pela net, mas até o momento o unico q faz oq promete é o seu! se alguem souber por favor me manda por email : victor.bfs@hotmail.com
Responder
27/07/2010
12:54
anderson escreveu:
Os arquivos de dowload não estão descopactando da um erro ??????
Responder
14/08/2010
04:43
Marcelo Fabiano Vargas escreveu:
Otimo mesmo seu post !!! Ajudou muito !! Esse tipo de assunto é complicado se achar em portugues !!!
Responder
14/08/2010
10:23
Cheops Malta escreveu:
Olá Davi, não estou conseguindo baixar os códigos fontes, algum problema?
Responder
19/08/2010
12:18
Eduardo escreveu:
Muito bom cara! parabens!
Responder
31/08/2010
09:09
Ailton escreveu:
O post ta legal, mas para pessoas que não sabem como montar os scripts fica dificil de fazer a integração para que funcione em um site. O ideal seria desenvolver um modulo pronto que fosse zipado e disponibilizado para download. Eu mesmo, tive dificuldade de por para funcionar. Ailton Silva.
Responder
01/09/2010
06:29
Davi Ferreira escreveu:
Tem um link lá em cima, Ailton. "Download do código fonte". Lá tem todos os exemplos para download. Valeu!
Responder
13/09/2010
15:47
Leonardo escreveu:
Não estou conseguindo redimensionar a imagem, preciso que ao usuário selecionar a area desejada, preciso que uma imagem de 100px de altura e 100px de largura seja gravada na pasta, pode dar uma ajuda ? Ja tentei isso:
$oImg->redimensiona( 100,100, 'crop' );Mas não funciona corretamente. Parece que a posicaoCrop acaba se perdendo e seleciona uma area errada da imagem, tem alguma maneira de fazer isso? ObrigadoResponder
16/09/2010
05:27
Leonardo escreveu:
Davi, podes me ajudar? abraço
Responder
16/09/2010
16:20
Davi Ferreira escreveu:
Oi, Leonardo! Não sei se entendi muito bem sua dúvida, mas vou tentar ajudar :) Você não precisa forçar as dimensões no PHP, faz isso no próprio jCrop, como no meu terceiro exemplo:
$('#jcrop').Jcrop({ onChange: exibePreview, onSelect: exibePreview, minSize : [ 200, 200 ], maxSize : [ 200, 200 ], allowResize : false, addClass : 'custom' });Dessa forma o usuário só pode selecionar uma área de 100x100 pixels.Responder
17/09/2010
04:22
Leonardo escreveu:
Davi, não é exatamente isso. Isso ai daria um problema, se uma imagem fosse muito grande pegaria somente uma parte de 100x100 da imagem e recortaria, o que quero é que pegue uma parte de 600x600 e redimensione para 100x100 ao fazer upload. O que preciso é o seguinte, exemplo: Tenho uma imagem de 800x600. O que quero é que se a pessoa selecionar uma area equivalente de 400x400 pixels dessa mesma imagem ao fazer o upload da mesma, a area selecionada de 400x400 se ajuste para 100x100 pixels por exemplo. Ou seja que a imagem se redimensione de 400x400 (parte que o usuário selecionou) para 100x100 entendeu? Muito obrigado pela ajuda.
Responder
21/09/2010
09:22
Leonardo escreveu:
Davi, podes me ajudar novamente? abraço
Responder
17/10/2010
06:01
Fabiano Ribeiro escreveu:
Olá Davi, parabéns pelo Post. Sem dúvida é um ótimo recurso, porém estou tendo um probleminha... Tenho um CMS que utiliza o plugin JQuery Lightbox e fazendo alguns testes, pude ver que os dois juntos não estão funcionando. Se eu retiro as lightboxes o JCrop funciona numa boa, se eu deixo o Javascript da Lightbox o JCrop não funciona. Você poderia me ajudar amigão? Obs: Estou chamando ambos na index.php e utilizando Querystring no meu programa. Abraços!
Responder
17/10/2010
06:20
Davi Ferreira escreveu:
Oi, Fabiano! Não tá retornando nenhum erro de JavaScript quando os dois estão ativos? No Firebug não acusa nada?
Responder
17/10/2010
06:48
Fabiano escreveu:
Olá Davi!! Bem, não estou usando o Firebug. rsrsr Mas estou fazendo umas modificações no sistema e estou tentando fazer o crop fora da minha index principal. Parece que assim vai funcionar. Se não der certo dessa forma verifico com o Firebug e te respondo, sim? De qualquer forma muito obrigado pela atenção. =)
Responder
17/10/2010
08:18
Fabiano escreveu:
Boa tarde Davi, Realmente não funcionou. Assim que adiciono as linhas: automaticamente a lightbox para de funcionar. Daí, ao clicar na imagem ela é exibida na página, mas sem os efeitos da ligthbox. Retirando as 2 linhas funciona a lightbox. Como não entendo de JQuery não estou sabendo debugar. Não é exibido nenhuma mensagem de erro. Apenas para o funcionamento da Lightbox. Se puder ajudar eu agradeço muito... Abraços!
Responder
17/10/2010
08:27
Fabiano escreveu:
Ola novamente Davi, Acabei de conseguir fazer funcionar. O que fiz foi chamar apenas uma das linhas: "js/jquery.Jcrop.js" Parece que o problema aparece quando chamamos o arquivo "jquery.min" sem ele funcionou corretamente. Desculpe a insistência, sim? Abraços!
Responder
17/11/2010
06:31
mastterjoe escreveu:
Muito massa mesmo! faz tempo que eu procurava algo do tipo. vlw..! continue assim
Responder
28/11/2010
13:10
Diego escreveu:
Parabens pelo post esta otimo! estou com um problema na hora de enviar a imagem para outro diretorio que não seja na raiz, tipo ir para a pasta uploads, ja tentei de tudo até envia mas só q ele salva na pasta uma imagem e outra na raiz :S
Responder
29/11/2010
08:34
Vi escreveu:
Diego, veja se isso te ajuda, no bloco do if($oImg->valida() == 'OK') { .... //acrescente isso no final unlink( $imagem['name'] ); } else { // imagem inválida, exclui do servidor unlink( $imagem['name'] ); }
Responder
19/01/2011
15:15
Miguel Sampaio Furghestti escreveu:
Para ele remover a imagem da pasta raiz e manter só a imagem na pasta nova que definiu o diretório você precisa acrescentar isso no arquivo crop.php Depois disso: $oImg->grava( $diretorio . $_POST['img'] ); Acrescenta isso: $return = @unlink($img); Mais uma coisa, acrescentando para ela ir para um diretório que não seja a raiz depois o preview da imagem recortada fica o tamanho do recorte porém a imagem original distorcida, então tem que mudar no arquivo crop-simples.php aqui: $('#div-jcrop').html( '' ); Dai você troca o galeria/ pela pasta que você colocou no caso pasta/ Com isso o preview funcionará direitinho. Abraços
Responder
29/11/2010
07:22
Vi escreveu:
Boa Tarde!! Estou com o mesmo 'problema' que o Diego, sera que podria nos dar um help!?!?!? Parabens pelo Post!
Responder
02/12/2010
09:16
Fofonca escreveu:
muito massa, mas nao entendi direito, pois sou iniciante em php. Copiei a pasta para dentro do meu servidor e abre normalmente, funciona o exemplo1, mas o 2 e 3 mando atualizar e volta na mesma pagina sem fazer nada, apenas limpa os campos, poderia me ajudar? obrigado
Responder
22/12/2010
07:07
Marco Nobre escreveu:
Muito bom seu post Davi, belo script. Estou com o mesmo problema do amigo fofonca, estou usando o exemplo 2 e corto a imagem com crop legal, mas a imagem apenas muda de tamanho para as dimensoes selecionadas no crop, mas nao corta a parte selecionada. Alguem pode ajudar? abraços!
Responder
31/01/2011
13:01
Junior eberhardt escreveu:
Muito bom, bom mesmo esse jCrop, arrasou hein... só queria o seguinte se possível: quanto tu corta a imagem, eu mudei para ela ir para uma pasta imagem_normal, e queria fazer o mesmo para a miniatura, mas não consigo, a miniatura fica na raiz da pasta... se alguem puder ajudar agradeço...
Responder
20/05/2011
08:13
Marcelo escreveu:
Muito legal Davi, parabéns. Mas tenho uma dúvida. Se eu quiser enviar uma imagem 1800 x 1200 (sendo que a área que tenho de crop é de 700, ou seja, vou precisar criar um "thumb" da imagem original, e o crop é 640 x 480), como mantenho a proporção no preview? Tentei de tudo aqui, mas no preview fica somente a área superior da imagem, e não a proporção. Não sei se me fiz entender... Mas mantenho contato! Obrigado, Marcelo
Responder
20/05/2011
13:12
Cristiano escreveu:
Como faz para cadastrar a imagem gerada pelo jcrop no banco de dadas, e fazendo que o nome da imagem seja unico?
Responder
28/05/2011
17:55
Cristian escreveu:
como eu passo uma variavel php aqui: exemplo: $('#tit-jcrop').html('Feito!enviar outra imagem');
Responder
06/06/2011
23:03
Marco machado escreveu:
galera alguem me ajuda, estou tentando colokar na base de dados mas nao consigo
Responder
17/06/2011
22:51
Roberto Lunelli escreveu:
Davi, estava procurando dicas em como tornar a máscara fixa, sem permitir que fosse redimensionada e aqui encontrei a dica do allowResize = false Muito obrigado por compartilhar teu conhecimento. Abraço
Responder
11/07/2011
15:49
Bruno Campos Santos escreveu:
Olá davi primeiramente parabéns pelo tutorial mas eu encontrei várias falhas no jcrop:
1°o upload de .gifs não é processado no I.E
2°arquivos .png não são cortados no I.E
Preciso da tua ajuda e queria saber outra coisa:
Se duas pessoas enviarem uma imagem ao mesmo tempo e a imagem tiver o mesmo nome uma substituirá a outra então eu queria renomear a imagem diretamente do upload e depois salvar a imagem em outro diretório, tendeu?
Estou criando uma rede social revolucionaria e preciso de plugins como este mas preciso resolver esses bugs vc teria como me ajudar?
desde já agradeço
Responder
14/07/2011
20:44
Bruna escreveu:
'Estou criando uma rede social revolucionaria e preciso de plugins como este'
Como você pode criar uma rede social revolucionaria, copiando scripts dos outros ?
'preciso resolver esses bugs vc teria como me ajudar?'
Você vai resolver os bugs, ou quer que os outros resolvam, e entregue os scripts prontos?
'Se duas pessoas enviarem uma imagem ao mesmo tempo e a imagem tiver o mesmo nome uma substituirá a outra então eu queria renomear a imagem diretamente do upload e depois salvar a imagem em outro diretório'
Qualquer programador php primário sabe que para fazer isso, é só criar uma string tipo essa:
preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $imagem["name"], $XTs);
$n_img = md5(uniqid(time())) . "." . $XTs[1];
para salvar em outro diretório
$lugar_s = "NOME DA PASTA, DENTRO DO DIRETÓRIO/" . $n_img;
MUDA A SEGUINTE LINHA PARA ASSIM
move_uploaded_file($foto["tmp_name"], $lugar_s);
Mas me responde uma coisa, como você pode criar uma rede social revolucionaria sem saber programar php,
sei que essa não é a unica linguagem de programação, mas a lógica delas é tudo igual. Sem saber php, ou até mesmo java, você será incapaz de criar um site seguro,
com varias funcionalidades, e com layor agradável.Não sou eu que vou dizer que esse sonho é imposível[nestas condições], O TEMPO QUE VAI MOSTRAR ISSO A VOCÊ, não desista do seus sonhos, don't kill your dreams !
Responder
14/07/2011
20:49
Bruciwiless escreveu:
move_uploaded_file($foto["tmp_name"], $lugar_s);
^
|
|
|___ substitu-a $foto por $imagem
Responder
14/07/2011
20:52
Cristiano escreveu:
Bruna não seje malvada, deixe os ignorantes brincares de ser programador !!
Responder
09/08/2011
11:57
Henique escreveu:
Muito Bom, simplesmente perfeito, resolveu minha vida, obrigado.
Responder
12/08/2011
16:33
Henrique escreveu:
Alguem saberia como eu faço pra colocar a area de corte por exemplo em 300X300px e quando for gravar a imagem ele gravar em 125X125px?
Responder
24/08/2011
13:42
Henrique escreveu:
Resolvido.
Responder
12/09/2011
11:14
Rodrigo Pereira escreveu:
Alguem pode me ajudar?
Como faço para que script apague a foto depois da mesma esta recortada?
ja estou direcionando a foto cortada para outra pasta
mais a foto original ainda continua!
Responder
12/09/2011
11:55
Davi Ferreira escreveu:
Oi, Rodrigo.
Basta utilizar a função unlink na imagem original, após todo o processo, ex:
unlink('imagem.jpg');Responder
12/09/2011
13:39
Rodrigo Pereira escreveu:
Davi,
Essa linha de código e add em qual script?
Crop.php ou crop-fixo.php
me mande um ex por gentileza.
Grato.
Responder
13/09/2011
08:14
Davi Ferreira escreveu:
No crop-fixo mesmo, na linha 51, depois do if de validação da imagem:
if( $oImg->valida() == 'OK' ) { [...] } unlink($imagem['name']);Responder
13/09/2011
09:49
Rodrigo Pereira escreveu:
Davi descupas ai cara, mais não estou concequindo!!
meu ex:
<?php
// memory limit (nem todo server aceita)
ini_set("memory_limit","500M");
set_time_limit(0);
// processa arquivo
$imagem = ( isset( $_FILES['imagem'] ) && is_array( $_FILES['imagem'] ) ) ? $_FILES['imagem'] : NULL;
$tem_crop = false;
$img = '';
// valida a imagem enviada
if( $imagem['tmp_name'] )
{
// armazena dimensões da imagem
$imagesize = getimagesize( $imagem['tmp_name'] );
if( $imagesize !== false )
{
// move a imagem para o servidor
if( move_uploaded_file( $imagem['tmp_name'], $imagem['name'] ) )
{
include( 'm2brimagem.class.php' );
$oImg = new m2brimagem( $imagem['name'] );
// valida via m2brimagem
if( $oImg->valida() == 'OK' )
{
// redimensiona (opcional, só pra evitar imagens muito grandes)
$oImg->redimensiona( '800', '', '' );
// grava nova imagem
$oImg->grava( $imagem['name'] );
// novas dimensões da imagem
unlink($imagem['name']);
$imagesize = getimagesize( $imagem['name'] );
$img = '';
$preview = '';
$tem_crop = true;
}
TENTEI COLOCAR AKI TAMBEM DEU ERRO!!!
}
}
}
Onde sera o erro??
Responder
13/09/2011
10:23
Davi Ferreira escreveu:
Cara, você não está salvando com outro nome. Você está usando o mesmo nome, então a imagem original vai continuar lá... Você tem que mudar o:
$oImg->grava( $imagem['name'] );Para:
$oImg->grava(<novo_nome_da_imagem>); </novo_nome_da_imagem>Responder
13/11/2011
10:37
Lai Carina escreveu:
Olá Davi, primeiro meus Parabéns!
Preciso de uma ajuda, ja procurei bastante por aí..mas sem resultado
Criei um página formulário,onde o usuário clica em cadastrar foto(avatar) e abre o Jcrop_fixo(realiza o procedimento que ja esta funcionando)
porém ao cadastrar, a pagina fecha e gostaria de passar o nome da foto para a pagina anterior que é o cadastro, e essa pagina cadastro apareça a miniatura que foi salva..que esta la na pasta.(ou seja da uma atualizadano cadastro?!??)
POde me ajudar com uma dica?
Valew
Responder
28/12/2011
18:47
José Rigoni Jr escreveu:
Muito bom artigo obrigadão mesmo. Parabéns.
Responder
Deixe seu comentário: