Ir para conteúdo
joelzsbit

Salvar imagem no banco usando o script compressed

Recommended Posts

Pessoal implementei o link (https://xkeshi.github.io/image-compressor/) no meu site para fazer a compressão de imagens, porem preciso que essa imagem seja salva no banco.

Não estou conseguindo pegar essa imagem comprimida e enviar para um arquivo salvar.php que é o responsável para salvar no banco.

 

A imagem comprimida fica nesse bloco:

<div class="w-100 text-center" v-if="outputURL">
<img class="mw-100" :src="outputURL" :alt="output.name">
	<div class="mt-2">
		<a class="btn btn-sm btn-blocks btn-outline-primary mt-2" :download="output.name" :href="outputURL" title="Download the compressed image">Download</a>
	</div>
</div>

 

Pensei em colocar um botão de salvar ali no lugar do Download, porem como que vou enviar os dados da imagem para o arquivo salvar.php?

Compartilhar este post


Link para o post
Compartilhar em outros sites
CREATE TABLE `upload` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `img` VARCHAR(200) NOT NULL,
  `data` DATETIME NOT NULL,
  PRIMARY KEY (`id`));

Não sei como tu pega o nome do arquivo e o formato, mas eu fiz um exemplo com upload da W3S:

    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        $oarquivo = basename( $_FILES["fileToUpload"]["name"]);
        $sql = "INSERT INTO upload VALUES ";
        $sql .= htmlentities ("(null, '$oarquivo', NOW())");
        mysqli_query($strcon,$sql) or die("Impossivel cadastrar no banco de dados a imagem.");
        mysqli_close($strcon);
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";

    } else {
        echo "Sorry, there was an error uploading your file.";
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites
19 horas atrás, Megao disse:

Não sei como tu pega o nome do arquivo e o formato, mas eu fiz um exemplo com upload da W3S:

Ai é que esta o problema, não sei como fazer pra pegar a imagem... ela aparece dentro desa div:

 

<div class="mt-2">
		<a class="btn btn-sm btn-blocks btn-outline-primary mt-2" :download="output.name" :href="outputURL" title="Download the compressed image">Download</a>
	</div>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas o que preciso é usar o (https://xkeshi.github.io/image-compressor/) para depois passar pro PHP.

A imagem aparece nessa div:

<div class="mt-2">
		<a class="btn btn-sm btn-blocks btn-outline-primary mt-2" :download="output.name" :href="outputURL" title="Download the compressed image">Download</a>
	</div>

Talvez nesse condigo:

:download="output.name" :href="outputURL"

alterasse para algo como:

:upload="output.name" :href="salvar.php"

mas como que vou enviar os parâmetros para pegar la no salvar.php? 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, entendi! Pensei que este compressor fosse teu.

Como tu recebe a imagem do compressor para exibir no cliente?

É gerado algum link para a imagem ou ele simplesmente baixa?

 

Eu sinceramente estou um pouco confuso, mas acredito que eu consigo fazer, quando eu entender 100% como tu pega a imagem do compressor.

 

~

 

Dependendo da forma que tu baixa a imagem, poderia fazer assim:

 

Apenas um exemplo:

 

Banco de dados:

CREATE TABLE `upload` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `img` VARCHAR(200) NOT NULL,
  `data` DATETIME NOT NULL,
  PRIMARY KEY (`id`));

~~~~~~~~~~~~~~~~~~~~

Conexão com o banco de dados:

<?php

$Servidor = 'localhost';
$nomeBanco = 'leupload';
$Usuario = 'root';
$Senha = '';
$strcon = mysqli_connect($Servidor, $Usuario, $Senha, $nomeBanco); 

?>

~~~~~~~~~~~~~~~~~~~~

index.php

<?php

include ('conexao.php');

// ignore o rand
$nomeimagem = md5(rand(1,20));  // fiz isso apenas pra gerar um nome aleatório para a imagem
//

$imagemcomprimida = "blob:https://xkeshi.github.io/$nomeimagem";  # o nome aleatório que eu gerei

$imgbd = explode("/", $imagemcomprimida);  # filtra o url através da barra pra pegar apenas o nome


	echo 'blob:https://xkeshi.github.io/'.$imgbd[3];  # resultado: nome da imagem upada
	echo '<br><button>Aqui o teu botão de download e bla bla bla</button>'; 
	$oarquivo = $imgbd[3];

	// inserir no banco de dados //

	$sql = "INSERT INTO upload VALUES ";
	$sql .= htmlentities ("(null, '$oarquivo', NOW())");
	mysqli_query($strcon,$sql) or die("Impossivel cadastrar no banco de dados a imagem.");
	mysqli_close($strcon);
	// aviso do banco de dados
	echo '<hr>O banco de dados informa:';
	echo "<p><font color='red'>A imagem comprimida <font color='black'>$oarquivo</font> foi enviada para o banco de dados</font></p>";
	exit;
	?>

~~~~~~~~~~~~

 

Resultado final:

ExImgC.png.03e55bc5f04df7273a920207a8207ae1.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola amigo, obrigado por tentar me ajudar. 

 

Citar

Como tu recebe a imagem do compressor para exibir no cliente?

 

Recebo através do javascript que manda exibir nessa div:

<div class="mt-2">

 

Citar

É gerado algum link para a imagem ou ele simplesmente baixa?

 

Não, apenas exibe na div e tem um botão que ao clicar que faz o download da imagem (aqui, não foi upado ainda... faz o download apenas da memória)... 

 

nessa linha:

Citar

echo 'blob:https://xkeshi.github.io/'.$imgbd[3];  # resultado: nome da imagem upada

Aqui você já upou a imagem... 

 

e é isso que nao estou conseguindo upar uma imagem que o javascript exibe numa div.

 

Obs:

 

Queria usar esse "image-compressor", porque tem a vantagem de carregar e redimensionar a imagem rapidamente consequentemente salvando mais rápido no banco no meu caso usando o mysql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia!

Talvez seja possível com ftp salvando a imagem em alguma pasta e no banco de dados o nome e o formato dela.

Não tenho muita experiência com JavaScript e as informações que você postou não foram esclarecedoras pra mim.

Como você exibe a imagem com JavaScript, talvez seja melhor postar na categoria de JavaScript ou esperar alguém experiente nisso responder o tópico.

Boa sorte

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

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos.
       
      Quando programava em DOS. utilizava algumas teclas de atalho para: SALVAR / EDITAR / EXCLUIR / IMPRIMIR.
      Por exemplo:
      Salvar ----> ALT+S
      Editar ----> ALT+E
      Excluir --> ALT+X
      Imprimir -> ALT+I

      no PHP tem como colocar esses ATALHOS nos button, para o usuário trabalhar com esses atalhos e como seria ?

      grato,
       
      Cesar
    • Por violin101
      Caros Amigos, saudações.
       
      Por favor, me perdoa em postar uma dúvida.
       
      Preciso criar uma Rotina onde o usuário possa buscar na Base de Dados de Produtos, tanto por Código e Descrição, ou seja:
      - caso o usuário digita o Código, mostra os dados do Produto.
      - caso o usuário digita a Descrição, mostra os dados do Produto
       
      Fiz uma Rotina, onde o usuário digita a DESCRIÇÃO com a função AUTOCOMPLETE.    <=== está funcionando certinho.
       
      Minha dúvida é como faço para DIGITAR o Código e mostrar os dados também.
       
      o meu AutoComplete na MODEL está assim.
      public function autoCompleteProduto($q){ $this->db->select('*' ) ->from('produtos') ->where('produtos.statusProd',1) ->like('descricao', $q) ->limit(5) ->order_by('descricao', 'ASC'); $query = $this->db->get(); if ($query->num_rows() > 0) { foreach ($query->result_array() as $row) { $row_set[] = ['label' => str_pad($row['idProdutos'], '5', '0', STR_PAD_LEFT).' - '.$row['descricao'], 'id' => $row['idProdutos'], 'descricao' => $row['descricao'], 'cod_interno' => $row['cod_interno'], 'prd_unid' => $row['prd_unid'], 'estoque_atual' => $row['estoque_atual'] ]; } echo json_encode($row_set); } }  
       
      no CONTROLLER está assim:
      public function autoCompleteProduto() { $this->load->model('estoque/lancamentos_model'); if (isset($_GET['term'])) { $q = strtolower($_GET['term']); $this->lancamentos_model->autoCompleteProduto($q); } }  
       
      na VIEW está assim:
      <div class="col-md-10"> <label for="idProdutos">Produto:</label> <input type="hidden" name="idProdutos" id="idProdutos"> <input type="text" class="form-control" id="descricao" name="descricao" style="font-size:15px; font-weight:bold;" placeholder="Pesquisar por descrição do produto" disabled> </div>  
      VIEW + JAVASCRIPT
       
      //Função para trazer os Dados pelo o AutoComplete. function resolveAutocomplete() { $("#descricao").autocomplete({ source: "<?php echo base_url(); ?>estoque/lancamentos/autoCompleteProduto/", minLength: 2, select: function (event, ui) { $("#idProdutos").val(ui.item.id); $("#cod_interno").val(ui.item.cod_interno); $("#descricao").val(ui.item.descricao); $("#prd_unid").val(ui.item.prd_unid); $("#estoque_atual").val(ui.item.estoque_atual); $("#qtde").focus(); } }); } // inicia o autocomplete resolveAutocomplete();  
      Grato,
       
      Cesar
    • Por belann
      Olá!
       
      Estou tentando criar um projeto laravel e está dando o seguinte erro 
      curl error 60 while downloading https://getcomposer.org/versions: SSL certificate problem: unable to get local issu
        er certificate
      Já tentei atualizar o composer, mas dá o mesmo erro acima.
    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma dúvida de validação de INPUT com função moeda.
       
      Tenho um input onde o usuário digita um valor qualquer, por exemplo: 1.234,56
      o problema é quando precisa atualizar o valor.
       
      Quando o usuário atualizar o input fica assim: 1.234,
       
      como faço para atualizar as casas decimais, conforme o valor for sendo alterado ?
       
      o input está assim:
       
      <div class="col-md-2"> <label for="">Valor Unitário</label> <input type="text" class="form-control" id="estoqprod" name="estoqprod" style="font-size:15px; font-weight:bold; width:100%; text-align:center;" placeholder="0,00" OnKeyUp="calcProd();" onkeypress="return(FormataMoeda(this,'.',',',event))" > </div>  
      a função para formatar o input para moeda está assim:
      obs.: a Função CalcProd está executando corretamente
      function calcProd(){ //Obter valor digitado do produto var estoq_prod = document.getElementById("estoqprod").value; //Remover ponto e trocar a virgula por ponto while (estoq_prod.indexOf(".") >= 0) { estoq_prod = estoq_prod.replace(".", ""); } estoq_prod = estoq_prod.replace(",","."); //Obter valor digitado do produto var prod_qtde = document.getElementById("qtde").value; //Remover ponto e trocar a virgula por ponto while (prod_qtde.indexOf(".") >= 0) { prod_qtde = prod_qtde.replace(".", ""); } prod_qtde = prod_qtde.replace(",","."); //Calcula o Valor do Desconto if (prod_qtde > 0 && estoq_prod > 0) { calc_total_produto = parseFloat(prod_qtde) - parseFloat(estoq_prod); var numero = calc_total_produto.toFixed(2).split('.'); //Calculo para não deixar GRAVAR valores negativos if (calc_total_produto < 0 ) { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.') * -1; document.getElementById("qtdeTotal").value = numero.join(','); } else { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.'); document.getElementById("qtdeTotal").value = numero.join(','); } } else { if (estoq_prod > 0) { document.getElementById("qtdeTotal").value = document.getElementById("estoqprod").value; } else { document.getElementById("qtdeTotal").value = "0,00"; } } } /*---Função para Formatar Campo para Moeda [R$]---*/ function FormataMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){ var sep = 0; var key = ''; var i = j = 0; var len = len2 = 0; var strCheck = '0123456789'; var aux = aux2 = ''; var whichCode = (window.Event) ? e.which : e.keyCode; if (whichCode == 13) return true; key = String.fromCharCode(whichCode); // Valor para o código da Chave if (strCheck.indexOf(key) == -1) return false; // Chave inválida len = objTextBox.value.length; for(i = 0; i < len; i++) if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break; aux = ''; for(; i < len; i++) if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i); aux += key; len = aux.length; if (len == 0) objTextBox.value = ''; if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux; if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux; if (len > 2) { aux2 = ''; for (j = 0, i = len - 3; i >= 0; i--) { if (j == 3) { aux2 += SeparadorMilesimo; j = 0; } aux2 += aux.charAt(i); j++; } objTextBox.value = ''; len2 = aux2.length; for (i = len2 - 1; i >= 0; i--) objTextBox.value += aux2.charAt(i); objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len); } return false; }  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma dúvida de validação de INPUT com função moeda.
       
      Tenho um input onde o usuário digita um valor qualquer, por exemplo: 1.234,56
      o problema é quando precisa atualizar o valor.
       
      Quando o usuário atualizar o input fica assim: 1.234,
       
      como faço para atualizar as casas decimais, conforme o valor for sendo alterado ?
       
      o input está assim:
       
      <div class="col-md-2"> <label for="">Valor Unitário</label> <input type="text" class="form-control" id="estoqprod" name="estoqprod" style="font-size:15px; font-weight:bold; width:100%; text-align:center;" placeholder="0,00" OnKeyUp="calcProd();" onkeypress="return(FormataMoeda(this,'.',',',event))" > </div>  
      a função para formatar o input para moeda está assim:
      obs.: a Função CalcProd está executando corretamente
      function calcProd(){ //Obter valor digitado do produto var estoq_prod = document.getElementById("estoqprod").value; //Remover ponto e trocar a virgula por ponto while (estoq_prod.indexOf(".") >= 0) { estoq_prod = estoq_prod.replace(".", ""); } estoq_prod = estoq_prod.replace(",","."); //Obter valor digitado do produto var prod_qtde = document.getElementById("qtde").value; //Remover ponto e trocar a virgula por ponto while (prod_qtde.indexOf(".") >= 0) { prod_qtde = prod_qtde.replace(".", ""); } prod_qtde = prod_qtde.replace(",","."); //Calcula o Valor do Desconto if (prod_qtde > 0 && estoq_prod > 0) { calc_total_produto = parseFloat(prod_qtde) - parseFloat(estoq_prod); var numero = calc_total_produto.toFixed(2).split('.'); //Calculo para não deixar GRAVAR valores negativos if (calc_total_produto < 0 ) { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.') * -1; document.getElementById("qtdeTotal").value = numero.join(','); } else { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.'); document.getElementById("qtdeTotal").value = numero.join(','); } } else { if (estoq_prod > 0) { document.getElementById("qtdeTotal").value = document.getElementById("estoqprod").value; } else { document.getElementById("qtdeTotal").value = "0,00"; } } } /*---Função para Formatar Campo para Moeda [R$]---*/ function FormataMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){ var sep = 0; var key = ''; var i = j = 0; var len = len2 = 0; var strCheck = '0123456789'; var aux = aux2 = ''; var whichCode = (window.Event) ? e.which : e.keyCode; if (whichCode == 13) return true; key = String.fromCharCode(whichCode); // Valor para o código da Chave if (strCheck.indexOf(key) == -1) return false; // Chave inválida len = objTextBox.value.length; for(i = 0; i < len; i++) if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break; aux = ''; for(; i < len; i++) if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i); aux += key; len = aux.length; if (len == 0) objTextBox.value = ''; if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux; if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux; if (len > 2) { aux2 = ''; for (j = 0, i = len - 3; i >= 0; i--) { if (j == 3) { aux2 += SeparadorMilesimo; j = 0; } aux2 += aux.charAt(i); j++; } objTextBox.value = ''; len2 = aux2.length; for (i = len2 - 1; i >= 0; i--) objTextBox.value += aux2.charAt(i); objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len); } return false; }  
      Grato,
       
      Cesar
×

Informação importante

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