Problem: The Windows binaries sometimes use a forward slash instead of a back slash in the output filename, which generates an error, but pngcrush writes a very large PNG file to the output filename anyway, which is annoying behavior, because it actually makes files that are larger than the original.
Expected outcome: Pngcrush should use only backslashes in the filename on Windows platforms, and it should not write larger files than the original if a filesystem error occurs.
Terminal output: (notice the forward slash in the error message "Could not open output file")
C:\Users\admin\folder>C:\Users\admin\pngcrush.exe -d "C:\
Users\admin\folder_crush" -bit_depth 1 -plte_len 1 -brute -w 32 -
c 0 "C:\Users\admin\folder\image0009.png"
| pngcrush 1.7.15
| Copyright (C) 1998-2002,2006-2011 Glenn Randers-Pehrson
| Portions copyright (C) 2005 Greg Roelofs
| This is a free, open-source program. Permission is irrevocably
| granted to everyone to use this version of pngcrush without
| payment of any fee.
| Executable name is pngcrush
| It was built with libpng version 1.5.2rc02, and is
| running with libpng version 1.5.2rc02 - March 22, 2011
| Copyright (C) 1998-2004, 2006-2011 Glenn Randers-Pehrson,
| Copyright (C) 1996, 1997 Andreas Dilger,
| Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
| and zlib version 1.2.5, Copyright (C) 1995-2010 (or later),
| Jean-loup Gailly and Mark Adler.
| It was compiled with gcc version 4.5.2.
Recompressing C:\Users\admin\folder\image0009.png
Total length of data found in IDAT chunks = 2032
Reducing truecolor image to grayscale.
IDAT length with method 11 (fm 0 zl 2 zs 2) = 86749
IDAT length with method 12 (fm 1 zl 2 zs 2) = 86856
Could not open output file C:\Users\admin\folder_crush/image000
9.png
Thanks. I think this failure only occurs when the "-d" option is used, and the binary is built not with DJGPP as was the case in the past. I have revised pngcrush-1.7.23 to use the backslash on Windows platforms. Sorry, I don't have access to a Windows development platform so can't make or test the binary. I have uploaded sources.
View and moderate all "bugs Discussion" comments posted by this user
Mark all as spam, and block user from posting to "Bugs"
I tried to compile it under Cygwin, and I ran it under cmd.exe. It's still giving the error randomly on some image files.
Output:
C:\Users\admin\folder>C:\Users\admin\pngcrush.exe -d "C:\
Users\Oak\Downloads\folder_crush" -bit_depth 1 -plte_len 1 -brute -w 32 -
c 0 "C:\Users\admin\folder\folder0006.png"
| pngcrush 1.7.23
| Copyright (C) 1998-2002,2006-2012 Glenn Randers-Pehrson
| Portions copyright (C) 2005 Greg Roelofs
| This is a free, open-source program. Permission is irrevocably
| granted to everyone to use this version of pngcrush without
| payment of any fee.
| Executable name is pngcrush
| It was built with libpng version 1.5.7, and is
| running with libpng version 1.5.7 - December 15, 2011
| Copyright (C) 1998-2004, 2006-2012 Glenn Randers-Pehrson,
| Copyright (C) 1996, 1997 Andreas Dilger,
| Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
| and zlib version 1.2.5, Copyright (C) 1995-2010 (or later),
| Jean-loup Gailly and Mark Adler.
| It was compiled with gcc version 3.4.4 (cygming special, gdc 0.12, using dmd
0.125).
cygwin warning:
MS-DOS style path detected: C:\Users\admin\folder_crush
Preferred POSIX equivalent is: /admin/folder_crush
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Recompressing C:\Users\admin\folder\folder0006.png
Total length of data found in IDAT chunks = 2032
Reducing truecolor image to grayscale.
IDAT length with method 11 (fm 0 zl 2 zs 2) = 86749
IDAT length with method 12 (fm 1 zl 2 zs 2) = 86856
IDAT length with method 13 (fm 2 zl 2 zs 2) = 86870
IDAT length with method 14 (fm 3 zl 2 zs 2) = 86875
IDAT length with method 15 (fm 4 zl 2 zs 2) = 86878
IDAT length with method 16 (fm 5 zl 2 zs 2) = 86749
IDAT length with method 17 (fm 0 zl 1 zs 0) = 3040
IDAT length with method 18 (fm 1 zl 1 zs 0) = 4390
IDAT length with method 19 (fm 2 zl 1 zs 0) = 4390
IDAT length with method 20 (fm 3 zl 1 zs 0) = 4390
IDAT length with method 21 (fm 4 zl 1 zs 0) = 4391
IDAT length with method 22 (fm 5 zl 1 zs 0) = 3040
IDAT length with method 23 (fm 0 zl 1 zs 1) = 3040
IDAT length with method 24 (fm 1 zl 1 zs 1) = 4390
IDAT length with method 25 (fm 2 zl 1 zs 1) = 4390
IDAT length with method 26 (fm 3 zl 1 zs 1) = 4390
IDAT length with method 27 (fm 4 zl 1 zs 1) = 4391
IDAT length with method 28 (fm 5 zl 1 zs 1) = 3040
Could not open output file C:\Users\admin\folder_crush\badappletr
ace0006.png
That's somewhat crazy. Cygwin reads filenames with backslashes but must have
forward slashes when it writes them. What about the C:\ Does that have to be
C/ or what?
Also it cannot be "random" but specifically when the "-d" option is used with
full pathnames.
Ah, I see, it wants the "C:\Users\" changed to "/" on a Cygwin platform.
Does this work (i.e. using a POSIX-style directory name in the -d option)?
C:\Users\admin\folder>C:\Users\admin\pngcrush.exe -d "/Oak/Downloads/folder_crush" -bit_depth 1 -plte_len 1 -brute -w 32 -
c 0 "C:\Users\admin\folder\folder0006.png"
View and moderate all "bugs Discussion" comments posted by this user
Mark all as spam, and block user from posting to "Bugs"
I tried modifying my batch file somewhat so that it would work correctly under Cygwin.
When in Cygwin, the following line does not work, and it outputs an ~80kB file instead of a ~7kB file like I would expect.
$ /cygdrive/c/Users/Oak/Downloads/pngcrush.exe -d "/cygdrive/c/Users/Oak/Downlo
ads/badappletrace_crush" -bit_depth 1 -plte_len 1 -brute -w 32 -c 0 "/cygdrive/
c/Users/Oak/Downloads/badappletrace/badappletrace0799.png"
| pngcrush 1.7.23
| Copyright (C) 1998-2002,2006-2012 Glenn Randers-Pehrson
| Portions copyright (C) 2005 Greg Roelofs
| This is a free, open-source program. Permission is irrevocably
| granted to everyone to use this version of pngcrush without
| payment of any fee.
| Executable name is pngcrush
| It was built with libpng version 1.5.7, and is
| running with libpng version 1.5.7 - December 15, 2011
| Copyright (C) 1998-2004, 2006-2012 Glenn Randers-Pehrson,
| Copyright (C) 1996, 1997 Andreas Dilger,
| Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
| and zlib version 1.2.5, Copyright (C) 1995-2010 (or later),
| Jean-loup Gailly and Mark Adler.
| It was compiled with gcc version 3.4.4 (cygming special, gdc 0.12, using dmd
0.125).
Recompressing /cygdrive/c/Users/Oak/Downloads/badappletrace/badappletrace0799
.png
Total length of data found in IDAT chunks = 7158
Reducing truecolor image to grayscale.
IDAT length with method 11 (fm 0 zl 2 zs 2) = 87682
IDAT length with method 12 (fm 1 zl 2 zs 2) = 87739
IDAT length with method 13 (fm 2 zl 2 zs 2) = 87332
Could not open output file /cygdrive/c/Users/Oak/Downloads/badappletrace_crush\b
adappletrace0799.png
Try pngcrush-1.7.24
The -d option now takes an optional slash, so if pngcrush is supplying
the wrong type on some platform, the user can supply the correct one, e.g.,
/cygdrive/c/Users/Oak/Downloads/pngcrush.exe -d
"/cygdrive/c/Users/Oak/Downloads/badappletrace_crush/" -bit_depth 1 -plte_len 1 -brute -w 32 -c 0
"/cygdrive/c/Users/Oak/Downloads/badappletrace/badappletrace0799.png"
View and moderate all "bugs Discussion" comments posted by this user
Mark all as spam, and block user from posting to "Bugs"
I'm still getting the error, but the slash is facing the correct direction. Oddly enough, I ran the same command three times, and each time, the error occurs after a different "IDAT length with method" iteration, in a seemingly random way. Cygwin output is below:
$ /cygdrive/c/Users/Oak/Downloads/pngcrush.exe -d "/cygdrive/c/Users/Oak/Downlo
ads/badappletrace_crush/" -bit_depth 1 -plte_len 1 -brute -w 32 -c 0 "/cygdrive
/c/Users/Oak/Downloads/badappletrace/badappletrace0799.png"
| pngcrush 1.7.24
| Copyright (C) 1998-2002,2006-2012 Glenn Randers-Pehrson
| Portions copyright (C) 2005 Greg Roelofs
| This is a free, open-source program. Permission is irrevocably
| granted to everyone to use this version of pngcrush without
| payment of any fee.
| Executable name is pngcrush
| It was built with libpng version 1.5.7, and is
| running with libpng version 1.5.7 - December 15, 2011
| Copyright (C) 1998-2004, 2006-2012 Glenn Randers-Pehrson,
| Copyright (C) 1996, 1997 Andreas Dilger,
| Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
| and zlib version 1.2.5, Copyright (C) 1995-2010 (or later),
| Jean-loup Gailly and Mark Adler.
| It was compiled with gcc version 3.4.4 (cygming special, gdc 0.12, using dmd
0.125).
Recompressing /cygdrive/c/Users/Oak/Downloads/badappletrace/badappletrace0799
.png
Total length of data found in IDAT chunks = 7158
Reducing truecolor image to grayscale.
IDAT length with method 11 (fm 0 zl 2 zs 2) = 87682
IDAT length with method 12 (fm 1 zl 2 zs 2) = 87739
IDAT length with method 13 (fm 2 zl 2 zs 2) = 87332
IDAT length with method 14 (fm 3 zl 2 zs 2) = 88421
IDAT length with method 15 (fm 4 zl 2 zs 2) = 87425
IDAT length with method 16 (fm 5 zl 2 zs 2) = 87314
Could not open output file /cygdrive/c/Users/Oak/Downloads/badappletrace_crush/b
adappletrace0799.png
$ /cygdrive/c/Users/Oak/Downloads/pngcrush.exe -d "/cygdrive/c/Users/Oak/Downlo
ads/badappletrace_crush/" -bit_depth 1 -plte_len 1 -brute -w 32 -c 0 "/cygdrive
/c/Users/Oak/Downloads/badappletrace/badappletrace0799.png"
| pngcrush 1.7.24
| Copyright (C) 1998-2002,2006-2012 Glenn Randers-Pehrson
| Portions copyright (C) 2005 Greg Roelofs
| This is a free, open-source program. Permission is irrevocably
| granted to everyone to use this version of pngcrush without
| payment of any fee.
| Executable name is pngcrush
| It was built with libpng version 1.5.7, and is
| running with libpng version 1.5.7 - December 15, 2011
| Copyright (C) 1998-2004, 2006-2012 Glenn Randers-Pehrson,
| Copyright (C) 1996, 1997 Andreas Dilger,
| Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
| and zlib version 1.2.5, Copyright (C) 1995-2010 (or later),
| Jean-loup Gailly and Mark Adler.
| It was compiled with gcc version 3.4.4 (cygming special, gdc 0.12, using dmd
0.125).
Recompressing /cygdrive/c/Users/Oak/Downloads/badappletrace/badappletrace0799
.png
Total length of data found in IDAT chunks = 7158
Reducing truecolor image to grayscale.
IDAT length with method 11 (fm 0 zl 2 zs 2) = 87682
IDAT length with method 12 (fm 1 zl 2 zs 2) = 87739
IDAT length with method 13 (fm 2 zl 2 zs 2) = 87332
Could not open output file /cygdrive/c/Users/Oak/Downloads/badappletrace_crush/b
adappletrace0799.png
$ /cygdrive/c/Users/Oak/Downloads/pngcrush.exe -d "/cygdrive/c/Users/Oak/Downlo
ads/badappletrace_crush/" -bit_depth 1 -plte_len 1 -brute -w 32 -c 0 "/cygdrive
/c/Users/Oak/Downloads/badappletrace/badappletrace0799.png"
| pngcrush 1.7.24
| Copyright (C) 1998-2002,2006-2012 Glenn Randers-Pehrson
| Portions copyright (C) 2005 Greg Roelofs
| This is a free, open-source program. Permission is irrevocably
| granted to everyone to use this version of pngcrush without
| payment of any fee.
| Executable name is pngcrush
| It was built with libpng version 1.5.7, and is
| running with libpng version 1.5.7 - December 15, 2011
| Copyright (C) 1998-2004, 2006-2012 Glenn Randers-Pehrson,
| Copyright (C) 1996, 1997 Andreas Dilger,
| Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
| and zlib version 1.2.5, Copyright (C) 1995-2010 (or later),
| Jean-loup Gailly and Mark Adler.
| It was compiled with gcc version 3.4.4 (cygming special, gdc 0.12, using dmd
0.125).
Recompressing /cygdrive/c/Users/Oak/Downloads/badappletrace/badappletrace0799
.png
Total length of data found in IDAT chunks = 7158
Reducing truecolor image to grayscale.
IDAT length with method 11 (fm 0 zl 2 zs 2) = 87682
IDAT length with method 12 (fm 1 zl 2 zs 2) = 87739
IDAT length with method 13 (fm 2 zl 2 zs 2) = 87332
IDAT length with method 14 (fm 3 zl 2 zs 2) = 88421
IDAT length with method 15 (fm 4 zl 2 zs 2) = 87425
IDAT length with method 16 (fm 5 zl 2 zs 2) = 87314
IDAT length with method 17 (fm 0 zl 1 zs 0) = 10123
IDAT length with method 18 (fm 1 zl 1 zs 0) = 11712
IDAT length with method 19 (fm 2 zl 1 zs 0) = 9905
IDAT length with method 20 (fm 3 zl 1 zs 0) = 13384
IDAT length with method 21 (fm 4 zl 1 zs 0) = 9657
IDAT length with method 22 (fm 5 zl 1 zs 0) = 9946
IDAT length with method 23 (fm 0 zl 1 zs 1) = 10123
IDAT length with method 24 (fm 1 zl 1 zs 1) = 11712
IDAT length with method 25 (fm 2 zl 1 zs 1) = 9905
IDAT length with method 26 (fm 3 zl 1 zs 1) = 13384
IDAT length with method 27 (fm 4 zl 1 zs 1) = 9657
IDAT length with method 28 (fm 5 zl 1 zs 1) = 9946
IDAT length with method 29 (fm 0 zl 2 zs 0) = 9486
IDAT length with method 30 (fm 1 zl 2 zs 0) = 10807
IDAT length with method 31 (fm 2 zl 2 zs 0) = 9593
IDAT length with method 32 (fm 3 zl 2 zs 0) = 12561
IDAT length with method 33 (fm 4 zl 2 zs 0) = 9390
IDAT length with method 34 (fm 5 zl 2 zs 0) = 9579
IDAT length with method 35 (fm 0 zl 2 zs 1) = 9486
IDAT length with method 36 (fm 1 zl 2 zs 1) = 10807
IDAT length with method 37 (fm 2 zl 2 zs 1) = 9593
IDAT length with method 38 (fm 3 zl 2 zs 1) = 12561
IDAT length with method 39 (fm 4 zl 2 zs 1) = 9390
IDAT length with method 40 (fm 5 zl 2 zs 1) = 9579
IDAT length with method 41 (fm 0 zl 3 zs 0) = 9254
IDAT length with method 42 (fm 1 zl 3 zs 0) = 10592
IDAT length with method 43 (fm 2 zl 3 zs 0) = 9354
IDAT length with method 44 (fm 3 zl 3 zs 0) = 12044
IDAT length with method 45 (fm 4 zl 3 zs 0) = 9098
IDAT length with method 46 (fm 5 zl 3 zs 0) = 9343
IDAT length with method 47 (fm 0 zl 3 zs 1) = 9254
IDAT length with method 48 (fm 1 zl 3 zs 1) = 10592
IDAT length with method 49 (fm 2 zl 3 zs 1) = 9354
IDAT length with method 50 (fm 3 zl 3 zs 1) = 12044
IDAT length with method 51 (fm 4 zl 3 zs 1) = 9098
IDAT length with method 52 (fm 5 zl 3 zs 1) = 9343
IDAT length with method 53 (fm 0 zl 4 zs 0) = 6491
IDAT length with method 54 (fm 1 zl 4 zs 0) = 7646
IDAT length with method 55 (fm 2 zl 4 zs 0) = 5354
IDAT length with method 56 (fm 3 zl 4 zs 0) = 8894
IDAT length with method 57 (fm 4 zl 4 zs 0) = 5317
IDAT length with method 58 (fm 5 zl 4 zs 0) = 5442
IDAT length with method 59 (fm 0 zl 4 zs 1) = 6516
IDAT length with method 60 (fm 1 zl 4 zs 1) = 7667
IDAT length with method 61 (fm 2 zl 4 zs 1) = 5344
IDAT length with method 62 (fm 3 zl 4 zs 1) = 8781
IDAT length with method 63 (fm 4 zl 4 zs 1) = 5306
IDAT length with method 64 (fm 5 zl 4 zs 1) = 5425
IDAT length with method 65 (fm 0 zl 5 zs 0) = 6280
IDAT length with method 66 (fm 1 zl 5 zs 0) = 7544
IDAT length with method 67 (fm 2 zl 5 zs 0) = 5280
IDAT length with method 68 (fm 3 zl 5 zs 0) = 8806
IDAT length with method 69 (fm 4 zl 5 zs 0) = 5260
IDAT length with method 70 (fm 5 zl 5 zs 0) = 5354
IDAT length with method 71 (fm 0 zl 5 zs 1) = 6335
IDAT length with method 72 (fm 1 zl 5 zs 1) = 7570
IDAT length with method 73 (fm 2 zl 5 zs 1) = 5290
Could not open output file /cygdrive/c/Users/Oak/Downloads/badappletrace_crush/b
adappletrace0799.png
Very odd. Are you running out of disk space or something, to make
the "open" fail after it has succeeded a few times?
Please try with the "-v" (verbose) option. The output will be voluminous so please upload it as an attachment rather than embedding it in the comment.