PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → WX - Trabalhando com Byte Array
WX - Trabalhando com Byte Array
Iniciado por adrianoboller, jun., 04 2016 1:21 AM - 19 respostas
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 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.

//LENDO UM ARQUIVO PDF E SALVANDO EM DISCO
sAuxis string

sDocumentTitleis string

MyBufferis Buffer

sDocumentTitle= fExtractPath( sAux, fFileName )

MyBuffer= fLoadText( sAux )

fSaveText("TEST.PDF", myBuffer )

//TESTE O ARQUIVO GERADO: TEST.PDF




LEITURA DE BYTE ARRAY
//EXEMPLO

MyBuffer is Buffer = fLoadBuffer("TEST.PDF")

//Agora você pode cortar buffer f.i.

slice is Buffer = MyBuffer [[1 TO 8]] // leia o primeiro 8 bytes

// OR ...se preferir um array de bytes

n is int = Length(MyBuffer)

fileArr is array of n byte

FOR i = 1 TO n

fileArr[ i ] = MyBuffer[[ i ]]

END

//A variável fileArr tem o conteúdo lido.



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/…
// Encode a string in base 64
bufBase64 isbuffer = Crypt(bufToEncode, "", compressNone + cryptNone, encodeBASE64)


Uncrypt:
http://help.windev.com/en-US/…
// Declare and initialize the variables
StringToEncrypt is string = "The number of my account in Switzerland is 74538290"
Password is string = "JamesBond007"
EncryptedString is string
DecryptedString is string
// Encrypt the message
EncryptedString = Crypt(StringToEncrypt, Password, cryptSecure)
// Send the message by email for example
...
// Decrypt the message later
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

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em março, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em abril, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em abril, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em abril, 28 2020 - 4:46 AM
Exemplo Download

https://depot.pcsoft.fr/resource.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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em março, 08 2021 - 4:56 PM
Procedure WSObterListaMensagens()
//Importar mensagens aluno//

NextTitle("")
HourGlass() // criando load

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) // 80% de compressao da imagem

bufFotoMsg2 is Buffer = fLoadBuffer(fCurrentDir()+"\imagemfoto.jpg") //pega o arquivo modificado o tamanho

//5000kb para 600kb mantendo a qualidade

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 //pronto
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 // Adiciona mensagem
//Info("Gravou com sucesso!")

ELSE

Error(ErrorInfo(), HErrorInfo())

END

// ELSE
//
// HReset(tab_mensagens)
// HReadSeek(tab_mensagens,msg_chave_externa,gvRetornoMsg.mensagens[x].chave_externa,hIdentical)
//
// bufFotoMsg is Buffer = Decode(gvRetornoMsg.mensagens[x].img_mensagem, encodeBASE64)
//
// 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 = bufFotoMsg
// 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 HModify(tab_mensagens) = True THEN // Atualiza mensagem
// //Info("Atualizado com sucesso!")
//
// 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

//Mensagem quando não há conexão com servidor//
ToastDisplay(gFontBold() + gFont("Arial") + gFontSize(6) + ...
gPen(RGB(255,255,255)) + "Ops! Sem resposta do servidor!", ...
toastShort, vaBottom, haCenter)

END

Multitask(-1)
HourGlass(False) //Remomendo load
NextTitle("") // Titulo fim load


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em março, 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) // 80% de compressao

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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em março, 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

// STC_DIA_MSG = QRY_MENSAGEM_SELECIONADA_ID.msg_dia_mensagem

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 // 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em março, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em março, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em março, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em julho, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em setembro, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em março, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em março, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em abril, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em maio, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em maio, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 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/
Membro registado
3.413 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 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/