Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   error #53 jpg android (https://www.clubdelphi.com/foros/showthread.php?t=97282)

ralf1987 13-03-2025 17:43:47

error #53 jpg android
 
Buen día.
el problema se da cuando intento abrir la imagen capturada desde un celular y la quiero mostrar en otra aplicación.


con este codigo lo cargo al servidor ftp
Código Delphi [-]
 
var FileName: string;
 ms: TMemoryStream; 
Surf: TBitmapSurface; 
JpgQuality : TBitmapCodecSaveParams; 
begin ms := TMemoryStream.Create; 
try JpgQuality.Quality := 75;
 Image1.Bitmap.Assign(Image);
 try
 Surf := TBitmapSurface.Create;
 try
 Surf.Assign(image);
 if not TBitmapCodecManager.SaveToStream(MS, Surf, '.jpg', @JpgQuality)
 then
 raise EBitmapSavingFailed.Create('Error guardando imagen');
 finally 
Surf.Free; 
end;
 ms.Position := 0;
// ms.SaveToStream(FStream);
 FTP.Host := 'direccion'; 
FTP.Username := 'fer';
 FTP.Password := '**********';
 FTP.Port := 33265;
 FTP.Passive := false;
 FTP.ConnectTimeout := 100;
 FTP.Connect(); 
ms.Position := 0;
 FTP.Put(ms, nombrefoto.Text + '.jpg');
 finally
 ms.Free;
 end;
 finally
 FTP.Disconnect;
 end;


y con este codigo intento mostrarlo en la otra aplicacion

Código Delphi [-]
 procedure LoadURLImage(Image: TImage; URL: String); 
var 
TempName: String; 
begin TempName := 'temp' + ExtractFileExt(URL); 
URLDownloadToFile(nil, PCHAR(URL), PCHAR(TempName), 0, nil);
 if FileExists(TempName) = true then begin Image.Picture.LoadFromFile(TempName);
 end else begin Image.Picture.LoadFromFile('C:\IMA\NO.JPG'); end; DeleteFile(TempName); application.ProcessMessages; end;


procedure TFOTOVEHICULOS.btmostarClick(Sender: TObject);
 begin LoadURLImage(Image1,'direccion/380.jpg'); end;


pero al momento de ejecutar la accion solo dice jpeg error #53
la imagen se guarda correctamente en el servidor pero no se muestra


gracias por su ayuda

Neftali [Germán.Estévez] 14-03-2025 11:33:39

He visto que usas FTP.
Revisa el tipo de transferencia FTP que estás utilizando. Si no estás utilizando transferencia "binaria" puedes ser que el fichero se altere.

ralf1987 14-03-2025 22:31:41

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 562706)
He visto que usas FTP.
Revisa el tipo de transferencia FTP que estás utilizando. Si no estás utilizando transferencia "binaria" puedes ser que el fichero se altere.


Gracias por la información.


de alguna manera es cierto, pero lo tengo configurado como binario.


Pero la foto por mas que le indique que fuera jpg, lo guardo con formato png, por lo tanto al intentar cargar un jpg en el timage se generaba el error por la codificación del archivo.
Al final se resolvió con un código de esta persona [Chris] no puedo poner url
club delphi com foros showthread t=80857 esta es la dirección del código que utilice excelente solución.
Código Delphi [-]
  
 Function gclas(Source:TStream):TGraphicClass; 
 var
 FStreamHeader : TStringStream;
  StartPosition : Int64; 
 CONST PNGFILE_HEADER = '‰PNG';  
BMPFILE_HEADER = 'BM';  
JPGFILE_HEADER = 'ÿØÿà'; 
 Begin 
 try  
 StartPosition := Source.Position; 
 IF Source.Size > 0 Then
  Source.Position := 0 
 else 
 // Stream vacío  
Raise Exception.Create('El stream no tiene datos'); 
 FStreamHeader := TStringStream.Create('');
  with FStreamHeader do    
 begin 
        CopyFrom(Source,512);  // Copiamos el header del Stream  
if pos(PNGFILE_HEADER,DataString) > 0     Then     
  Result := TPNGObject 
 else 
 if pos(BMPFILE_HEADER,DataString) > 0 Then  
     Result := TBitmap 
 else 
 if pos(JPGFILE_HEADER,DataString) > 0 Then      
 Result := TJPEGImage  
else  
Result := TGraphic; // no quiero producir una excepción a este nivel 
 end; 
 finally  
Source.Position := StartPosition;
  end; 
  end;
 procedure TFOTOVEHICULOS.verfotosClick (sender)
  var  ms: TmemoryStream;
  httpCli: TIdHTTP;  
url: string;
  I,ATOP: Integer;
  imgPath: string;
  image1: TImage;
  BTE:TButton; 
 begin 
 atop:=0; 
 //consulta sql lista fotos  
while not listafotos.Eof do  
begin 
 httpCli := TIdHTTP.Create(nil);
  ms := TMemoryStream.Create(); 
 url := 'direccion'+ nombrefoto +'.jpg';  
httpCli.Get(url,ms);
  ms.Position := 0; 
 gclas(ms);  
Application.ProcessMessages;  
Image1 := TImage.Create(self);
  Image1.Height := 250; 
 Image1.Width := 250; 
 Image1.Top := atop; 
 BTE:=TButton.Create(NIL); 
 BTE.Top:=ATOP+255;
  BTE.Height:=25;  
BTE.Width:=83; 
 BTE.Parent:=ScrollBox1; 
 BTE.Name:='bt_'+NOMBREFOTO; 
 BTE.OnClick:=ELIMINARI; 
 Inc(atop,280);
  Image1.Left := 0;
  image1.Parent:=ScrollBox1 ;
  image1.Name:='IM_'+NOMBREFOTO);
  image1.Stretch:=True; 
 image1.OnDblClick:=ABRIRIMAGEN; 
 image1.Picture.LoadFromStream(ms); 
 ms.free; 
 httpCli.free; 
 listafotos.Next; 
 end 
 end;


La franja horaria es GMT +2. Ahora son las 11:27:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi