Jump to content
Fivewin Brasil

Redimensionar imagem


marcioe

Recommended Posts

Pessoal, imagina um cadastro de produtos, onde o usuário busca a maioria das fotos da web. Então vem foto com tamanho grande e as vezes ao gravar no banco de dados costuma dar erros, devido ao tamanho da foto baixada. 

Então estava pensando em algo pra " redimensionar" essa foto antes de gravar no banco de dados.

Agradeço a quem puder contribuir

 

meu código de gravação de imagem

*-------------------------------------------------------------------------------
* Gravar a Logomarca da Empresa
*-------------------------------------------------------------------------------
FUNCTION INSERE_APAGA_FOTO_EMPRESA(T_OPERACAO_EMPRESA)
	T_ID_FOTO	:= 0    
	BEGIN TRANSACTION
		cQuery_Mtabela  := 'DELETE from foto_empresa where CODIGO_EMPRESA = ' +  TRANSFORMA_SQL(T_CODIGO,"N",06,0)  + ' LIMIT 1'
		COMITAR_DADOS_SQL(cQuery_Mtabela)
	END TRANSACTION
   BEGIN TRANSACTION
		cQuery_Mtabela  := 						"INSERT INTO foto_empresa ( "
		cQuery_Mtabela	 := cQuery_Mtabela + " CODIGO_EMPRESA 	"
		cQuery_Mtabela	 := cQuery_Mtabela + ",DATA_FOTO			"
		cQuery_Mtabela	 := cQuery_Mtabela + ",FOTO				"					
		cQuery_Mtabela	 := cQuery_Mtabela +	" ) VALUES ( "
		cQuery_Mtabela	 := cQuery_Mtabela +	TRANSFORMA_SQL(T_CODIGO,"N",06,0) 				+ ","
		cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(DATE(),"D",08,0) 					+ ","
		cQuery_Mtabela	 := cQuery_Mtabela + ANY2SQL( MemoRead( (T_FOTOGRAFIA) ) ) 
		cQuery_Mtabela	 := cQuery_Mtabela + " )"
		COMITAR_DADOS_SQL(cQuery_Mtabela)
	END TRANSACTION
	HB_GCAll(.T.)
RETURN .T.                                                           

 

Link to comment
Share on other sites

Deixa eu explicar melhor.

Imagina assim:

o usuario tira uma Foto com a Web cam, dai o sistema Salva a Foto em c:\pasta_sistema\TMP_IMG.JPG

e ao salvar o sistema "Lê essa imagem e grava no banco de dados", porem as vezes dependendo da webcam essa Foto tirada é de 900k ai congela o sistema.

Mesmo eu configurando o MY.ini, 

REDEFINE IMAGE oT_FOTOGRAFIA var T_FOTOGRAFIA ID 4001 OF oFld_EMPRESA:aDialogs[ 1 ] adjust	FILE T_FOTOGRAFIA UPDATE ON CLICK( cFile := SPACE(2000), cFile := DRIVE_TR+"\"+CURDIR() + "\TMP_IMG.JPG", AMPLIAR_IMG(cFile)  )

Aqui eu gravo a imagem no banco de dados

* Gravar a Logomarca da Empresa
*-------------------------------------------------------------------------------
FUNCTION INSERE_APAGA_FOTO_EMPRESA(T_OPERACAO_EMPRESA)
	T_ID_FOTO	:= 0    
	BEGIN TRANSACTION
		cQuery_Mtabela  := 'DELETE from foto_empresa where CODIGO_EMPRESA = ' +  TRANSFORMA_SQL(T_CODIGO,"N",06,0)  + ' LIMIT 1'
		COMITAR_DADOS_SQL(cQuery_Mtabela)
	END TRANSACTION
	*----------------------------------------------------------------------------	
   BEGIN TRANSACTION
   		cQuery_Mtabela  := 'SET GLOBAL max_allowed_packet=1073741824'
		COMITAR_DADOS_SQL(cQuery_Mtabela)
		*-------------------------------------------------------------------------
		cQuery_Mtabela  := 						"INSERT INTO foto_empresa ( "
		cQuery_Mtabela	 := cQuery_Mtabela + " CODIGO_EMPRESA 	"
		cQuery_Mtabela	 := cQuery_Mtabela + ",DATA_FOTO			"
		cQuery_Mtabela	 := cQuery_Mtabela + ",FOTO				"					
		cQuery_Mtabela	 := cQuery_Mtabela +	" ) VALUES ( "
		cQuery_Mtabela	 := cQuery_Mtabela +	TRANSFORMA_SQL(T_CODIGO,"N",06,0) 				+ ","
		cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(DATE(),"D",08,0) 					+ ","
		cQuery_Mtabela	 := cQuery_Mtabela + ANY2SQL( MemoRead( (T_FOTOGRAFIA) ) ) 
		cQuery_Mtabela	 := cQuery_Mtabela + " )"
		COMITAR_DADOS_SQL(cQuery_Mtabela)
	END TRANSACTION
	HB_GCAll(.T.)
RETURN .T.                                                           

 

 

Queria uma Forma de Reduzir o Tamanho da imagem c:\pasta_sistema\TMP_IMG.JPG, pois as vezes ela tem 900 k ou mais dependendo da WEBCAM, com isso iria padronizar as imagens no banco de dados.

 

9k2j4n.jpg

a imagem é esta aqui que esta no C:\PASTA SISTEMA\........

2mdnmly.jpg

 

 

 

 

 

Link to comment
Share on other sites

Antes de gravar a imagem em seu banco, use a rotina do Eduardo Motta, para criticá-la e avisar ao uçuário que a imagem não está dentro do padrão do seu sistema. Depois de criticar, você pode chamar de dentro do seu programa, qualquer editor de imagem, para o uçuário modificá-la para o padrão do seu sistema, ou usando a idéia do Alessandro, redimensioná-la. Tendeu? Nem eu... kkkkkkkkkkkkkkkkkkkkkkkk

Link to comment
Share on other sites

Olá Márcio, vou disponibilizar uma função completa que faz exatamente o que vc precisa é a que uso em meus sistemas.

**==========================================================================
STATIC FUNCTION GetPngMC(oImage)
**==========================================================================
LOCAL cFile,cStrBmp

cFile := cGetFile( "Bitmap (*.bmp)| *.bmp|" + ;
                    "DIB   (*.dib)| *.dib|" + ;
                    "PCX   (*.pcx)| *.pcx|" + ;
                    "JPEG  (*.jpg)| *.jpg|" + ;
                    "GIF   (*.gif)| *.gif|" + ;
                    "TARGA (*.tga)| *.tga|" + ;
                    "RLE   (*.rle)| *.rle|" + ;
                    "All Files (*.*)| *.*"    ;
                    ,"Selecione o arquivo", 4 )

IF !Empty(cFile) .and. File(cFile)
   oImage:LoadBmp( cFile )
   
   //redimenciona o tamanho da foto 256 x 194 pixel
   oImage:hBitmap := ResizeBmp( oImage:hBitmap, 256, 194, .T. ) //redimensiona
   
   cStrBmp := BmpToStr(oImage:hBitmap)      //transf de img para string
   oImage:Refresh()

	//   0 -> Bmp  //   2 -> Jpg   //  13 -> Png
   oImage:SaveImage(cNome, 13, 75)
ENDIF

RETURN NIL

Explicando, vc vai ler o arquivo em C: LoadBMP, depois redimenciona com REsizeBMP e salva novamente Saveimage .

Link to comment
Share on other sites

 

Olá Márcio, vou disponibilizar uma função completa que faz exatamente o que vc precisa é a que uso em meus sistemas.


**==========================================================================
STATIC FUNCTION GetPngMC(oImage)
**==========================================================================
LOCAL cFile,cStrBmp

cFile := cGetFile( "Bitmap (*.bmp)| *.bmp|" + ;
                    "DIB   (*.dib)| *.dib|" + ;
                    "PCX   (*.pcx)| *.pcx|" + ;
                    "JPEG  (*.jpg)| *.jpg|" + ;
                    "GIF   (*.gif)| *.gif|" + ;
                    "TARGA (*.tga)| *.tga|" + ;
                    "RLE   (*.rle)| *.rle|" + ;
                    "All Files (*.*)| *.*"    ;
                    ,"Selecione o arquivo", 4 )

IF !Empty(cFile) .and. File(cFile)
   oImage:LoadBmp( cFile )
   
   //redimenciona o tamanho da foto 256 x 194 pixel
   oImage:hBitmap := ResizeBmp( oImage:hBitmap, 256, 194, .T. ) //redimensiona
   
   cStrBmp := BmpToStr(oImage:hBitmap)      //transf de img para string
   oImage:Refresh()

	//   0 -> Bmp  //   2 -> Jpg   //  13 -> Png
   oImage:SaveImage(cNome, 13, 75)
ENDIF

RETURN NIL

Explicando, vc vai ler o arquivo em C: LoadBMP, depois redimenciona com REsizeBMP e salva novamente Saveimage .

Márcio, resolveu ?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...