|
WX - Trabalhando com Byte Array |
Started by Boller, Jun., 04 2016 1:21 AM - 24 replies |
| |
| | | |
|
| |
Registered member 3,715 messages |
|
Posted on June, 04 2016 - 1:21 AM |
Prezados,
Estarei passando um exemplo aqui para ler um arquivo pdf em uma matriz de bytes.
A linguagem WL, permite fazer a leitura de um arquivo pdf.
sAuxis string
sDocumentTitleis string
MyBufferis Buffer
sDocumentTitle= fExtractPath( sAux, fFileName )
MyBuffer= fLoadText( sAux )
fSaveText("TEST.PDF", myBuffer )
LEITURA DE BYTE ARRAY
MyBuffer is Buffer = fLoadBuffer("TEST.PDF")
slice is Buffer = MyBuffer [[1 TO 8]]
n is int = Length(MyBuffer)
fileArr is array of n byte
FOR i = 1 TO n
fileArr[ i ] = MyBuffer[[ i ]]
END
Como pode ser visto no código, eu salvo na variável buffer para um arquivo com extensão pdf e depois que eu posso ler esse arquivo sem erros em qualquer leitor de PDF. Posso entao usar o comando Crypt para serializar o buffer em uma grande string de caracteres, letras e números e enviar via webservice. E com UnCrypt no outro lado remonto o buffer para ter o arquivo pdf e assim conseguimos fazer algo muito parecido com o Teletransporte do filme Star Trek. kkkk...
Crypt: http://help.windev.com/en-US/…
bufBase64 isbuffer = Crypt(bufToEncode, "", compressNone + cryptNone, encodeBASE64)
Uncrypt: http://help.windev.com/en-US/…
StringToEncrypt is string = "The number of my account in Switzerland is 74538290" Password is string = "JamesBond007" EncryptedString is string DecryptedString is string
EncryptedString = Crypt(StringToEncrypt, Password, cryptSecure)
...
DecryptedString = Uncrypt(EncryptedString, Password, cryptSecure) Info("The encrypted message meant: " + DecryptedString)
Assim eu posso usando os comandos acima enviar o buffer (byte array) com o formato de um bloco de texto para um webservice. E ainda posso fazer com que o webservice responda de volta: Arquivo PDF inválido ou válido.
Espero que o exemplo ajude a comunidade a produzir novos exemplos e novas soluções.
Forte abraço
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on March, 24 2020 - 11:33 PM |
Prezados
Esse assunto é muito solicitado e vou passar umas orientações adicionais
No lado do servidor na tabela de cadastro de produtos pense em ter os seguintes campos:
IdProduto NomeProduto ImagemGrande binário ImagemThumbs binário ImagemGrandeZipada binário ImagemThumsZipada binário
Ao gravar uma imagem de um produto Salvar a imagem com 80% no campo ImagemGrande Salvar essa mesma imagem redimensionando para um tamanho menor para ImagemThumbs Zipar o buffer e salvar o binário ImagemGrandeZipada Zipar o buffer e salvar o binário ImagemThumsZipada
Quando o Webservice requisitar o produto tem as duas imagens zipadas e salvas em 80% é reduzida para Thumbs A requisição não terá o tempo de processamento de zipar para entregar ao celular que requisitou a informação Ao chegar no celular pelo Webservice faz a descompactacao e salvamento da informação na tabela Hfsql Classic as duas imagens
Esse procedimento agiliza o download e garante a exibição dos dados mesmo em off-line.
Espero ter ajudado com essa sugestão
Um forte abraço a todos
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on April, 10 2020 - 2:26 PM |
Ou use
Bufimage is buffer = dliadbuffer( « imagem.jpg »)
ImagemString is string = encode(bufimagem, base64)
Reverso
ImagemBuff us buffer = decode(bufimagem, base64)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on April, 27 2020 - 8:56 PM |
Boa tarde...
Nossos clientes as vezes mandam protocolos impressos e gostaria de digitalizar e gravar no HFSQL.
Qual seria o melhor método?
Gravar a imagem dentro do banco ou criar um link das imagem em uma pasta?
Alguém tem exemplo disso ?
Tudo depende do teu gosto as duas funcionam (base binária ou link ftp httprequest)
O campo binário do Hfsql é muito bom
Como eu faço:
- Crio uma tabela t001_pessoas E nela crio os campos Mas não coloco o binário nessa tabela da foto Crio outra tabela t002_pessoas_fotos
Relaciono e coloco o campo binário Isso não vai deixar lento vai funcionar ok e o tamanho do buffer da imagem vai para essa tabela
Funciona muito bem não diminui velocidade de consulta
Só vai transitar na rede a foto somente quando pedir ela
Se der um select * não terei o buffer da foto transitando na rede sem motivo
Eu acho que é o mais lógico
Se for com link terá que fazer um http request além de um select
Será mais complexo, mas vai funcionar
Serão 4 operações e com a tabela binária, reservar o link numa variável e consultar com httprequest e depois um httpgettesult.
E um select com inner join 2 operação tem o resultado em um buffer ou em um array de string encode64 que terá que converter para buffer
Guardar no banco terá um consumo a mais de espaço, mas é bem simples e garantido
Se for link se for ip e trocou para DNS ou para outro ip ou DNS daí o link ficou inútil, não vai baixar
OK
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on April, 28 2020 - 4:46 AM |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on March, 08 2021 - 4:56 PM |
Procedure WSObterListaMensagens()
NextTitle("") HourGlass()
url is string = ""+gsUrlBackend+"/WSListarMensagens.rule?sys=EDU&alunoID="+gloAluno_id_externo+""
IF httpRequest(url) = True gvRetornoMsg = JSONToVariant(HTTPGetResult()) IF gvRetornoMsg.status = "OK" THEN x is int vTotal is int = gvRetornoMsg.mensagens..Count LOOP(vTotal) x++ HReset(tab_mensagens) IF HReadSeek(tab_mensagens,msg_chave_externa,gvRetornoMsg.mensagens[x].chave_externa,hIdentical) = False THEN bufFotoMsg1 is Buffer = Decode(gvRetornoMsg.mensagens[x].img_mensagem, encodeBASE64) imageFoto is Image = bufFotoMsg1 dSaveImageJPEG(imageFoto,fCurrentDir()+"\imagemfoto.jpg", 80) bufFotoMsg2 is Buffer = fLoadBuffer(fCurrentDir()+"\imagemfoto.jpg")
HReset(tab_mensagens) HReadSeek(tab_mensagens,msg_chave_externa,gvRetornoMsg.mensagens[x].chave_externa,hIdentical) tab_mensagens.msg_chave_externa = gvRetornoMsg.mensagens[x].chave_externa tab_mensagens.alu_chave_externa = gvRetornoMsg.mensagens[x].id_aluno tab_mensagens.alu_instituicao_id = gvRetornoMsg.mensagens[x].id_instituicao tab_mensagens.msg_nome_remetente = gvRetornoMsg.mensagens[x].nome_remetente tab_mensagens.msg_assunto = gvRetornoMsg.mensagens[x].assunto tab_mensagens.msg_conteudo = gvRetornoMsg.mensagens[x].conteudo tab_mensagens.msg_fotografia_msg = bufFotoMsg2 tab_mensagens.msg_resposta_sim = gvRetornoMsg.mensagens[x].resposta_sim tab_mensagens.msg_resposta_nao = gvRetornoMsg.mensagens[x].resposta_nao tab_mensagens.msg_resposta_talvez = gvRetornoMsg.mensagens[x].resposta_talvez tab_mensagens.msg_dh_cadastro = gvRetornoMsg.mensagens[x].dh_cadastro IF HAdd(tab_mensagens) = True THEN ELSE Error(ErrorInfo(), HErrorInfo()) END END END ELSE ToastDisplay(gFontBold() + gFont("Arial") + gFontSize(8) + ... gPen(RGB(255,255,255)) + gvRetornoMsg.Erro, ... toastShort, vaBottom, haCenter) END ELSE ToastDisplay(gFontBold() + gFont("Arial") + gFontSize(6) + ... gPen(RGB(255,255,255)) + "Ops! Sem resposta do servidor!", ... toastShort, vaBottom, haCenter) END
Multitask(-1) HourGlass(False) NextTitle("")
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on March, 09 2021 - 2:56 PM |
Procedure RedimencionarFoto(ImgOriginal)
bufFoto is Buffer
Foto is Image = ImgOriginal
IF Length(ImgOriginal) > 0 dSaveImageJPEG(Foto,fCurrentDir()+"\imagemfoto.jpg", IMG_PADRAO_AJUSTADA) bufFoto = fLoadBuffer(fCurrentDir()+"\imagemfoto.jpg") ELSE fDelete(fCurrentDir()+"\imagemfoto.jpg",frReadOnly) END
RETURN(bufFoto)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on March, 09 2021 - 3:12 PM |
Prezados,
Caso nao tenha foto, coloca uma foto na posicao negativa e atribui ela e descobre pelo tamanho do buffer se tem ou nao a foto num campo binario usando LENGTH > 0
Procedure MyWindow(gMensagem_id)
QRY_MENSAGEM_SELECIONADA_ID.Parammsg_id = gMensagem_id
IF HExecuteQuery(QRY_MENSAGEM_SELECIONADA_ID) = True THEN FOR EACH QRY_MENSAGEM_SELECIONADA_ID IF Length (QRY_MENSAGEM_SELECIONADA_ID.msg_fotografia_msg) > 0 THEN
IMG_foto_mensagem = QRY_MENSAGEM_SELECIONADA_ID.msg_fotografia_msg ELSE
IMG_foto_mensagem = IMG_sem_foto
END END END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on March, 09 2021 - 3:16 PM |
Lembre-se
1 - passar parametros a query para filtrar
2 - HExecuteQuery OU HExecuteSQLQuery dispara o camando
IF True = para saber se deu certo o comando
exemplo
IF HExecuteQuery(Qry_query) = True
ELSE
END
3 - para ler o retorno tem que fazer um for each na query
IF HExecuteQuery(Qry_query) = True
for each Qry_query retorno = Qry_query.campo END
ELSE Info("Erro") END
4 - para atualizar o looper OU table só depois disso tudo
TableDisplay(table_grid, tatinit)
se for looper
LooperDisplay(loop_grid, tatinit)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on March, 16 2021 - 10:57 PM |
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on March, 16 2021 - 11:00 PM |
Passos:
1 - criar var tipo imagem 2 - ler a imagem que esta no banco com dloadbuffer e armazenar na imagem de memoria 3 - dresize dimensionar o tamanho 800x600 4 - fsavebuffer salvar o que resultou no dresize em disco 5 - dsaveimagejpg salvar em 80% 6 - ler novamente o arquivo e converter ele de volta para imagem de memoria e buffer
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on July, 26 2021 - 9:47 PM |
Fica do Ronei
SELECT
a320.numero_foto, a320.descricao_foto,Encode(a320.foto,'base64') AS foto
FROM cad_mercad_ficha_tecnica_fotos a320
WHERE
a320.codigo_mercadoria=1
sSQLSentenca is string dsQRYSelect is Data Source bRetornoSQL is boolean nRegistro is int = 0 nCodigoMercadoria is int = ExtractString(ParParametros,1,["|"])
sSQLSentenca = "SELECT a320.numero_foto,a320.descricao_foto,encode(a320.foto,'base64') AS foto FROM cad_mercad_ficha_tecnica_fotos a320 WHERE a320.codigo_mercadoria=" + nCodigoMercadoria
bRetornoSQL = SQLExec(sSQLSentenca, dsQRYSelect) IF bRetornoSQL = False THEN SQLInfo(dsQRYSelect) gsXML += "<Error>Erro Select BD - " + SQL.Error + " - " + SQL.MesError + "</Error>" ELSE gsXML += "<Dados>" WHILE SQLFetch(dsQRYSelect) = 0 nRegistro++ gsXML += "<Registro" + nRegistro + ">" Preenche_TAG("NumeroFoto",SQLGetCol(dsQRYSelect,1)) Preenche_TAG("DescricaoFoto",SQLGetCol(dsQRYSelect,2)) Preenche_TAG("ImagemFoto",SQLGetCol(dsQRYSelect,3)) gsXML += "</Registro" + nRegistro + ">" END gsXML += "</Dados>" gsXML += "<TotalRegistros>" + nRegistro + "</TotalRegistros>" END SQLClose(dsQRYSelect)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on September, 22 2021 - 11:16 PM |
O Sr Leomar fez vários testes com os mesmos arquivos e tamanhos. RESTSend +/- 20% mais rápido que HTTPSend
Para guardar
myimage is Buffer = fLoadBuffer(IMG_BANNER) bufBase64 is Buffer = Encrypt(myimage,"senha",cryptSecure,encodeBASE64)
Para Abrir
IMG_NoName1 = Decrypt(test.image,"senha",cryptSecure,encodeBASE64)
By Diego de Ponta Pora
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on March, 17 2022 - 5:22 PM |
Saber o tamanho de uma imagem ou se existe imagem no controle
imgx is Image = dLoadImage( IMG_NoName1)
IF imgx..BitPerPixel > 0 THEN Info("tem imagem") ELSE Info("vazio") END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on March, 31 2022 - 5:43 AM |
BAIXANDO DADOS DE PRODUTOS DE UM WEBSERVICE SOAP E FAZENDO DOWNLOAD DAS IMAGENS DE UMA URL
//EXECUTANDO O WEBSERVICE E PEGANDO O BLOCO CSV E CHAMANDO A PROC QUE VAI INTERPRETAR O CSV
Resultado is string = ws_sel_prodsite_app()
InterpretaPlotaResulta(Resultado)
------------------------------------------------------------------------------------
PROCEDURE InterpretaBlocoCsv(Resultado)
HourGlass(True) L is int = 0 X is int = 1 Linha is string QtdLinhas is int = StringCount(Resultado,"§",IgnoreCase)
HDeleteAll(view_prodsiteapp)
LOOP(QtdLinhas)
L++ Linha = ExtractString(Resultado,L,"§",FromBeginning) TestaCODWEB is string = NoSpace(ExtractString(Linha,2,";",FromBeginning)) HReset(view_prodsiteapp) //a1 excel poneiro IF HReadSeek(view_prodsiteapp, CODWEB, TestaCODWEB, hIdentical) = False //nao achou view_prodsiteapp.NOMEWEB = ExtractString(Linha,1,";",FromBeginning) view_prodsiteapp.CODWEB = ExtractString(Linha,2,";",FromBeginning) view_prodsiteapp.NOMMARC = ExtractString(Linha,3,";",FromBeginning) view_prodsiteapp.REFERENCIA = ExtractString(Linha,4,";",FromBeginning) view_prodsiteapp.PRECO_A = ExtractString(Linha,5,";",FromBeginning) view_prodsiteapp.PRECO_B = ExtractString(Linha,6,";",FromBeginning) view_prodsiteapp.DESCUENTO = ExtractString(Linha,7,";",FromBeginning) view_prodsiteapp.STOCK = ExtractString(Linha,8,";",FromBeginning) view_prodsiteapp.FOTOS_PATH = "https://www.fastrax.com.py/documentos/"+NoSpace(view_prodsiteapp.CODWEB)+".png" IF HAdd(view_prodsiteapp) = True Thread_BuscaGravaFoto(view_prodsiteapp.CODWEB, view_prodsiteapp.FOTOS_PATH ) LooperAdd(LOOP_Compra_Rapida,view_prodsiteapp.CODWEB +TAB+ view_prodsiteapp.NOMEWEB +TAB+ view_prodsiteapp.NOMMARC +TAB+ view_prodsiteapp.REFERENCIA +TAB+ view_prodsiteapp.PRECO_A +TAB+ view_prodsiteapp.PRECO_B +TAB+ view_prodsiteapp.DESCUENTO +TAB+ view_prodsiteapp.STOCK)
END
END END
LooperDisplay(LOOP_Compra_Rapida,taInit) //refresh
HourGlass(False)
------------------------------------------------------------------------
PROCEDURE Thread_BuscaGravaFoto(codwebx, pathfoto)
NaoExiste is boolean = False
HReset(view_prodsiteapp_fotos) IF HReadSeek(view_prodsiteapp_fotos,CODWEB,codwebx,hIdentical)= False THEN NaoExiste = True END
IF HNbRec(view_prodsiteapp) > 0 and NaoExiste = True HTTPRequest(pathfoto) //download
imagemProduto is Image = HTTPGetResult()
view_prodsiteapp_fotos.CODWEB = codwebx view_prodsiteapp_fotos.FOTOBIN = imagemProduto view_prodsiteapp_fotos.FOTOTHUMB = dResize(imagemProduto,60,30,drStretched) IF imagemProduto..BitPerPixel > 0 THEN //Info("tem imagem") HAdd(view_prodsiteapp_fotos) ELSE //Info("vazio") END
END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on April, 26 2022 - 9:30 PM |
bufImagem is Buffer
dSaveImageJPEG(IMG_resultado, fCurrentDir() + fSep() + "Image.JPEG")
bufImagem = fLoadBuffer(fCurrentDir() + fSep() + "Image.JPEG") ImagemB64 is Variant = Encode(bufImagem, encodeBASE64)
enviar_foto_recortada(id_pessoa,ImagemB64)
Close()
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on May, 05 2022 - 6:01 PM |
ProcedureSelecionaImagem(Janela,ControleImagem)
bufImagebufferisBuffer
sFileis string=fSelect("c:\","Selecione uma Foto...","Todos os arquivos (*.*)"+TAB+"*.*"+CR+"PNG"+TAB+"*.PNG"+CR+"JPEG"+TAB+"*.JPEG"+CR+"JPG"+TAB+"*.JPG","*.*")
IFfFileExist(sFile) =True
bufImagebuffer=fLoadBuffer(sFile)
sControlTelaImgis string=Janela+"."+ControleImagem
{sControlTelaImg,indControl} =bufImagebuffer
dResize({sControlTelaImg,indControl},{sControlTelaImg,indControl}..Width,{sControlTelaImg,indControl}..Height,drHomotheticCentered)
bufImagebuffer= {sControlTelaImg,indControl}
ELSE
Info("Nenhum arquivo selecionado!")
END
RESULTbufImagebuffer CASE ERROR:
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on May, 05 2022 - 6:02 PM |
ProcedureSaveJpg(Imagemis Image)
ratioXis real=130/Imagem..Width ratioYis real=130/Imagem..Height IFratioY<ratioXTHEN dResize(Imagem,130,RoundUp(Imagem..Height*ratioX)) ELSE dResize(Imagem,RoundUp(Imagem..Width*ratioY),130) END dSaveImageJPEG(Imagem,"foto.jpg",100)
RESULT(Imagem)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on June, 03 2022 - 8:34 PM |
Comando para setar resolução da câmera em 1080x1080 (Para fotos quadradas) Testando em WX26
VideoParameter(vipPhotoResolution, "1080 1080")
Rotina para enviar imagem para WS Rest (desenvolvido em PHP)
req is httpRequest sURL = URLEncode(sURL) req.URL = sURL req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.42000)" req.Method = httpPost imagem is Variant imagem = Encode(dLoadImage(IMG_FotoPac,imgDefault),encodeBASE64) req.Content = imagem
HTTPTimeOut(60s)
cMyResponse is httpResponse = HTTPSend(req)
IF ErrorOccurred THEN sRetorno = ErrorInfo(errFullDetails) Error(ErrorInfo(errFullDetails)) ELSE sRetorno = cMyResponse..Content ToastDisplay(sRetorno) Close() END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on June, 08 2022 - 8:25 PM |
Prezados,
Send Imagem by HTTPCreateForm sem serializar e sem fazer uso de encode base 64
Retificando o exemplo de imagem ficou assim usando HTTPCreateForm muito mais simples:
lIdForm is string = "form-data" HTTPTimeOut(60s) HTTPCreateForm(lIdForm) HTTPAddFile(lIdForm, "file", gsLastCapturePath) IF HTTPSendForm(lIdForm, sURL, httpPost, "AGENT") THEN sRetorno is JSON = HTTPGetResult() END
Retorna isso aqui:
{ "eyes": { "ratio":1.060935286195, "response":"olho esquerdo > olho direito por 0.06%" }, "eyebrows": { "ratio":1.060935286195, "response":"olho esquerdo > olho direito por 0.06%", "muscles": [
], "points": [
] }, "left_eyebrow": [
], "right_eyebrow": { "muscles": [ [ "Pr\u00f3cero", 8, 5 ], [ "Corrugador (e)", 336, 5 ], [ "Corrugador (e)", 468, 5 ] ], "points": [ [ 8, 5 ], [ 336, 5 ], [ 468, 5 ] ] }, "horizontal_proportion": [ "61", "89", "100", "84", "54" ], "vertical_proportion": { "muscles": [
], "firstThird": [ 376.2605480249, 1 ], "secondThird": [ 476.3402145526, 1.265985012388 ], "thirdThird": [ 654.4043092768, 1.739231797519 ] }, "mouth": { "ratio":0.006996088402819, "response":"boca esquerdo < boca direito por 0.01%" }, "width_height": { "ratio":0.9830342433159 }, "nose_width": { "ratio":0.8700248030915 }, "lips_proportion": [ 59.07622195097, 95.08417323614, 1.609516825823 ], "mouth_width_proportion": [ 390.1550973651, 888.6894845783, 401.280450558, 319.189598828 ], "thirds_middle_horizontal_proportion": [ 978.8176541113, 1046.883470115, 1033.853471242 ], "id":"uO3y04xfERN7lHludC8Q", "images":"I9Yd6tuAs0C9iC0IA7RK.jpg,horizontal_proportion_0.png,nose_0.png,thirds_middle_0.png,annotated_image0.png,left_eyebrow_0.jpg,nose_symmetry_0.png,eyebrows_0.jpg,lips_proportion_0.png,proportion_0.png, eyes_0.png,mouth_proportion_0.png" }
MUITO OBRIGADO AO FABIANO QUE PASSOU GENTILMENTE ESSE EXEMPLO PARA A COMUNIDADE!
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on March, 23 2023 - 8:00 PM |
//SALVANDO IMAGEM NO BANCO DE DADOS
path_imagem is string = fCurrentDir()+fSep()+"imagem.jpg"
dSaveImageJPEG(IMG_foto,path_imagem,100) /// 100% DA QUALIDADE 5000KB +-
IF fFileExist(path_imagem) = True THEN Info("A Imagem "+path_imagem+" Existe no disco") ELSE Info("A Imagem "+path_imagem+" nao existe no disco") RETURN END
T001_FOTOS.T001_DATA_HORA = DateSys() + TimeSys()
T001_FOTOS.T001_FOTO = fLoadBuffer(path_imagem)
IF HAdd(T001_FOTOS) = True THEN Info("GRAVOU FOTO NO BANCO") ELSE Error(ErrorInfo()) END
path_imagem is string = fCurrentDir()+fSep()+"imagem.jpg"
dSaveImageJPEG(IMG_foto,path_imagem,80) /// 80% DIMINUI DE 5000KB PARA 500KB MAS NAO PERDE QUALIDADE A OLHO NU.
IF fFileExist(path_imagem) = True THEN Info("A Imagem "+path_imagem+" Existe no disco") ELSE Info("A Imagem "+path_imagem+" nao existe no disco") RETURN END
T001_FOTOS.T001_DATA_HORA = DateSys() + TimeSys()
T001_FOTOS.T001_FOTO = fLoadBuffer(path_imagem)
IF HAdd(T001_FOTOS) = True THEN Info("GRAVOU FOTO NO BANCO") ELSE Error(ErrorInfo()) END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on March, 23 2023 - 9:02 PM |
TIRAR FOTO, REDUZIR O TAMANHO E SALVAR NO BANCO
// Résumé : Enregistre une photo // PROCEDURE PhotoEnregistre()
path_imagem is string = fCurrentDir()+fSep()+"IMAGEM.JPG" // ONDE VAI SALVAR A IMAGEM
//VideoParameter(vipPhotoResolution,"1080 1080")
VideoCapture(CAM_Appareil,path_imagem,viPictureCapture) // TIROU A FOTO
IMAGEM is Image // IMAGEM DE TRABALHO PARA REDIMENSIONAR O BUFFER EM OUTRO TAMANHO
IMAGEM = fLoadBuffer(path_imagem)
IF fFileExist(path_imagem) = True THEN //DEU CERTO Info("A Imagem "+path_imagem+" Existe no disco") dResize(IMAGEM,320,480,drStretched) //RESIZE DA IMAGEM dSaveImageJPEG(IMAGEM,path_imagem,80) //80% ELSE Info("A Imagem "+path_imagem+" nao existe no disco") //DEU ERRADO RETURN END
T001_FOTOS.T001_DATA_HORA = DateSys() + TimeSys()
T001_FOTOS.T001_FOTO = fLoadBuffer(path_imagem) //BUFFER MODIFICADO E SALVO NO BINARIO
IF HAdd(T001_FOTOS)=True THEN ShellExecute(path_imagem) //GRAVOU NO BANCO E ABRIU A IMAGEM END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on September, 08 2023 - 6:04 PM |
Compactar a imagem e daí serializar
Reduzir width e heigth com dResize
DsaveimageJpg por 80%
E daí enviar enviar encodada
Para enviar ImagemEncodada is string = encode(bufferImagem, base64)
Pra voltar a ser imagem usa Buffimagem is variant = Decode(ImagemEncodada, base64)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on October, 06 2023 - 7:00 PM |
Para colocar o conteúdo em um buffer e depois converter em texto para transmitir via Webservice:
ImagemBuf is buffer = fLoadBuffer(pathimagem)
Depois converter o buffer em texto
ImagemBase64 is string = Encode (ImagemBuf, base64)
Estando em formato de texto só enviar normal como qualquer outro campo do banco de dados.
Muito simples, e o inverso
ImagemBuffer is buffer = decode(imagemBase64, base64)
Img_foto = ImagemBuffer
DsaveimageJpg(Img_foto, fcurrentdir()+fsep()+”foto.jpg”, 80)
Mais detalhes:
https://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/1268-trabalhando-com-byte-array-3704/read.awp…
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Registered member 3,715 messages |
|
Posted on October, 19 2023 - 4:16 PM |
Buenos dias
Segue algumas dicas de como trabslhar com arquivos binários.
Em resumo
1-qualquer arquivo (doc, xls, pdf, png , jpg, bmp, ico, zip, rar, certificado digital, e outros…) é igualado a um buffer ou um variant.
2-para ler um arquivo em disco e trazer o buffer dele para var você precisa do path caminho absoluto onde está ele. Exemplo: c:\meuErp\fotos\clientes\jonilton.jpg
Então
MyBuffer is Buffer = fLoadBuffer("c:\meuErp\fotos\clientes\jonilton.jpg")
Ou
MyVariant is Variant = fLoadBuffer("c:\meuErp\fotos\clientes\jonilton.jpg")
3-Apos ter o buffer de qualquer arquivo você pode fazer modificações dele.
4-Posso antes de salvar em texto modificar o tamanho, rotação, conteúdo
MyImagem is imagem = myBuffer
//redimensionar o tamanho MyNewImagem is imagem MyNewImagem = dResize(MyImagem, MyImagem..width/2, MyImagem..heigth/2) //metade do tamanho
//rotacionar 90 graus MyNewImagem=dRotate(MyNewImagem,90)
5-se for para converter para texto
ImagemString is string = encode(myBuffer, base64)
Ou
ImagemString is string = encode(myVariant, base64)
6-Se pegar o Buffer e guardar no tipo de campo binário, pode apontar diretamente para um controle de tela tipo: A) control de imagem para os jpg, png, bmp, ico, svg, … control WordTT para os doc e docx C) control Planilha para os xls e xlsx D) comtrol pdf para os pdf E) outros para o Edt multiline e Edt multiline RTF
Ex
Img_FotoCliente = MyBuffer
t001_clientes.Nome = “Jonilton” t001_clientes.fotoBinaria = MyBuffer Hadd(t001_clientes)
7-Para salvar com menos dpi uma imagem então usa o comando DsaveimageJpg:
DsaveimageJpg(Img_fotocliente, fcurrentdir()+fsep()+”foto.jpg”, 80)
Deve ser antes de converter a imagem do disco para buffer
8-Para colocar o conteúdo em um buffer e depois converter em texto para transmitir via Webservice:
ImagemBuf is buffer = fLoadBuffer(pathimagem)
Depois converter o buffer em texto
ImagemBase64 is string = Encode (ImagemBuf, base64)
Estando em formato de texto só enviar normal como qualquer outro campo do banco de dados.
Muito simples, e o inverso
ImagemBuffer is buffer = decode(imagemBase64, base64)
Img_foto = ImagemBuffer
DsaveimageJpg(Img_foto, fcurrentdir()+fsep()+”foto.jpg”, 80)
9-o Encode converte buffer com espaços e carácteres e códigos de máquina e carácteres especiais em um array de string assim:
ImagemTexto is string = “gubibihuvyuvibibibuvygigyctfdtxrxezrzaraduewyrufiibonnpnk ivhcdyfugibihhivucuvugigufubihuvyxtcyvubibboivudyxy…”
Assim pode transmitir como fosse qualquer texto pelo Webservice soap ou rest !!!
10-Converter uma imagem em Thumbs
PROCEDURE PhotoThumbs()
path_imagem is string=fCurrentDir()+fSep()+"IMAGEM.JPG"//ONDE VAI SALVAR A IMAGEM
//VideoParameter(vipPhotoResolution,"1080 1080")
VideoCapture(CAM_Appareil,path_imagem,viPictureCapture)//TIROU A FOTO
IMAGEM is Image//IMAGEM DE TRABALHO PARA REDIMENSIONAR O BUFFER EM OUTRO TAMANHO
IMAGEM=fLoadBuffer(path_imagem)
IF fFileExist(path_imagem) =TrueTHEN//DEU CERTO Info("A Imagem "+path_imagem+" Existe no disco") dResize(IMAGEM,320,480,drStretched)//RESIZE DA IMAGEM dSaveImageJPEG(IMAGEM,path_imagem,80)//80% ELSE Info("A Imagem "+path_imagem+" nao existe no disco")//DEU ERRADO RETURN END
T001_FOTOS.T001_DATA_HORA=DateSys() +TimeSys()
T001_FOTOS.T001_FOTO=fLoadBuffer(path_imagem)//BUFFER MODIFICADO E SALVO NO BINARIO
IF HAdd(T001_FOTOS)=TrueTHEN ShellExecute(path_imagem)//GRAVOU NO BANCO E ABRIU A IMAGEM END
Um detalhe importante sobre o DsaveimageJpg
Salvar com 80% uma imagem de 5000kb vira 500kb e permanece a olho nu igual
dSaveImageJPEG(IMAGEM,path_imagem,80)//80%
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | | | |
| | |
|