Recent

Author Topic: [Solved] PNGImageException 'Chunk length exceeds stream length'  (Read 2183 times)

lainz

  • Hero Member
  • *****
  • Posts: 4468
    • https://lainz.github.io/
[Solved] PNGImageException 'Chunk length exceeds stream length'
« on: December 30, 2019, 09:30:17 pm »
I'm getting the error PNGImageException 'Chunk length exceeds stream length'


I'm using the unit posted here:
https://forum.lazarus.freepascal.org/index.php/topic,47901.msg344243.html#msg344243

With this code I can not replicate the error, but is the same I'm doing in my application that's really big and propietary so I can not post it, but this is the intended use:
Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   LBuffer : rawbytestring;
  4.   stream: TFileStream;
  5.   s: TStringList;
  6. begin
  7.   LBuffer := #27'@'; // Initialise the printer
  8.   s := TStringList.Create;
  9.   s.LoadFromFile(Application.Location + 'logo.txt');
  10.   LBuffer := LBuffer + _ESCPosPrintBitmap().RenderBitmapBase64(s.Text);
  11.   s.Free;
  12.  
  13.   stream := TFileStream.Create('logo.bin', fmCreate);
  14.   try
  15.     stream.Write(LBuffer[1], Length(LBuffer));
  16.   finally
  17.     stream.Free;
  18.   end;
  19. end;

Whit this base64 image:
Code: Pascal  [Select][+][-]
  1. data:image/png;base64,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

The application is in mode objfpc, the ssESCPosPrintBitmap.pas from the other post is in mode delphi.

What can be causing the issue, I tested the image and it's a valid PNG image... any ideas?
« Last Edit: December 30, 2019, 10:55:48 pm by lainz »

circular

  • Hero Member
  • *****
  • Posts: 4220
    • Personal webpage
Re: PNGImageException 'Chunk length exceeds stream length'
« Reply #1 on: December 30, 2019, 09:45:19 pm »
I suspect a bit of the stream is not saved for some reason.
Conscience is the debugger of the mind

lainz

  • Hero Member
  • *****
  • Posts: 4468
    • https://lainz.github.io/
Re: PNGImageException 'Chunk length exceeds stream length'
« Reply #2 on: December 30, 2019, 09:54:43 pm »
What puzzles me is that in the demo project everything works fine, but when I want to incorporate to the application the error occurs.

Cyrax

  • Hero Member
  • *****
  • Posts: 836
Re: PNGImageException 'Chunk length exceeds stream length'
« Reply #3 on: December 30, 2019, 10:26:05 pm »
Code: Pascal  [Select][+][-]
  1. type
  2.   IssESCPosPrintBitmap = interface( IInterface )
  3.       ['{3F279585-6D2E-451F-AF97-76F0E07A70DF}']
  4.       function RenderBitmap( const ABitmapFilename: string ): rawbytestring;
  5.       function RenderBitmapBase64(const base64data: string): rawbytestring;
  6.   end;
  7.  

What about changing all occurrences of string type to rawbytestring one? Does that help?

lainz

  • Hero Member
  • *****
  • Posts: 4468
    • https://lainz.github.io/
Re: PNGImageException 'Chunk length exceeds stream length'
« Reply #4 on: December 30, 2019, 10:37:54 pm »
Hi, it does nothing. :S

Also the function DecodeStringBase64(const s:string;strict:boolean=false):String; expects and returns strings.

winni

  • Hero Member
  • *****
  • Posts: 3197
Re: PNGImageException 'Chunk length exceeds stream length'
« Reply #5 on: December 30, 2019, 10:51:38 pm »
Hi!

Try to save the file without a stream but the old fashioned way:

Code: Pascal  [Select][+][-]
  1. var
  2. f : file of byte;  
  3.  
  4. .....
  5. assignFile(F,application.location+'logo.bin');
  6. rewrite(f);
  7. for i := 1 to length(LBuffer) do write(f,ord(LBuffer[i]));
  8. closeFile(f);                                              


Look if now still an error occurs.

Winni

lainz

  • Hero Member
  • *****
  • Posts: 4468
    • https://lainz.github.io/
Re: PNGImageException 'Chunk length exceeds stream length'
« Reply #6 on: December 30, 2019, 10:55:38 pm »
Thanks. I found the problem and it was outside the scope of the demo project, sorry  :o

The problem was that the TBufDataset for some reason loaded only a part of the base64 string.

Changed that line and it works.

 

TinyPortal © 2005-2018