Commit graph

382 commits

Author SHA1 Message Date
Toby Lawrence
2573b20966 Add support for optimizing PNGs loaded in-memory.
In keeping with being able to use oxipng as a library, this adds a way
for developers to optimize a PNG already in memory, instead of requiring
  it to exist on disk first.
2016-05-05 07:54:52 -04:00
Joshua Holmer
193e6496bd Version 0.7.0 2016-05-04 10:41:29 -04:00
Joshua Holmer
3a39b13acf Add option for changing number of threads at runtime
Closes #39
2016-05-04 10:37:45 -04:00
Joshua Holmer
e4cd9b85e7 Move default Options into impl Default in library 2016-05-04 10:09:26 -04:00
Joshua Holmer
aaf443fca7 Similarly optimize unfilter mode 2
Unfilter mode 1 can't benefit from this optimization
because it modifies and reads from the same line of data
2016-05-02 15:58:45 -04:00
Joshua Holmer
3652a69255 Optimize filter mode 1 2016-05-02 15:48:21 -04:00
Joshua Holmer
32c35596ea 25% speed improvement in filter mode 2 by using iter instead of for 2016-05-02 14:49:30 -04:00
Joshua Holmer
c0fddfe4e6 Minor compression improvement in interlaced images 2016-05-02 13:54:04 -04:00
Joshua Holmer
b8116dd3dd Version 0.6.0 [ci skip] 2016-05-02 09:40:37 -04:00
Joshua Holmer
a4a5953786 Implement --fix to fix CRC errors in PNG block headers
Closes #5
2016-05-02 09:25:48 -04:00
Joshua Holmer
08eb44ec1a Partially implement --preserve
Needs better implementation once stable Rust improves,
or perhaps see if there's a crate for this

Reference #4 but keep open
2016-04-29 23:37:27 -04:00
Joshua Holmer
73d477924e Merge branch 'master' of github.com:shssoichiro/oxipng 2016-04-22 13:37:41 -04:00
Joshua Holmer
2c3e35d8bb Moderately improve cyclomatic complexity 2016-04-22 13:31:59 -04:00
Joshua Holmer
fac83c023d Fix issue where output directory would not be created if it did not exist 2016-04-22 13:31:33 -04:00
Joshua Holmer
f3b8665278 Use miniz for compression strategies 0 and 1
Worst case (RGB/A images) it performs similarly to zlib
Best case (Indexed images) it performs 1-2 orders of magnitude better

Zlib is kept for strategies 2 and 3, where it performs an order of
magnitude better than miniz
2016-04-20 23:14:41 -04:00
Joshua Holmer
11308959fa Version 0.5.0 [ci skip] 2016-04-20 15:51:14 -04:00
Joshua Holmer
3f3fbb6f60 Don't report pretend mode if verbosity is set to none 2016-04-19 22:38:34 -04:00
Joshua Holmer
2e7bfa4ebc Add palette reduction
Closes #11
2016-04-13 23:16:32 -04:00
Joshua Holmer
ea484a8978 Version 0.4.0 2016-04-08 13:52:15 -04:00
Joshua Holmer
c78e3213d6 Update crates and fix interlacing issue 2016-04-08 13:37:00 -04:00
Josh Holmer
e9c44cbc0b Add -s as alias for --strip safe
Fixes #31
2016-04-08 11:56:51 -04:00
Joshua Holmer
1d0ce6fca8 Performance optimizations
Interlacing performance increased by about 50%
Various other minor optimizations throughout the program
2016-04-05 12:08:47 -04:00
Joshua Holmer
9302caed59 Optimize filter mode 5 SAD loop 2016-04-05 10:52:02 -04:00
Joshua Holmer
548c69cad7 Version 0.3.0 [ci skip] 2016-04-04 20:23:24 -04:00
Joshua Holmer
1fc81ef683 Support interlaced files and allow conversion between interlaced and progressive files
Closes #3
2016-04-04 16:07:46 -04:00
Joshua Holmer
2974bbbee3 Fix issue with very small images [ci skip] 2016-04-04 11:06:00 -04:00
Joshua Holmer
7280ca80ce Fix issues with 2-bit and 1-bit per pixel interlaced images [ci skip] 2016-03-30 21:42:33 -04:00
Joshua Holmer
5740867be5 Work on implementing interlacing [ci skip] 2016-03-29 22:44:21 -04:00
Joshua Holmer
489964add2 Release v0.2.2 [ci skip] 2016-03-21 12:28:20 -04:00
Joshua Holmer
c1031b1ddd Merge branch 'master' of github.com:shssoichiro/oxipng 2016-03-21 12:15:09 -04:00
Joshua Holmer
85ea2c21e5 Remove FIXME sections from code
One section can't be improved from what I can gather,
because we have to iterate the number of bits per pixel in advance.

The output section has been refactored to pull the block writing code
into a separate function.

Fixes #19
2016-03-21 12:14:22 -04:00
Joshua Holmer
132a15403a Don't store intermediate copies of compressed image data unless it is current best.
Reduces peak memory usage significantly.
2016-03-19 10:42:03 -04:00
Joshua Holmer
87e21c2020 Limit number of simultaneous threads to help memory usage at high opt levels
Still uses a lot of memory. Would like to remove the storage of all compression
data attempts and calculate the best immediately during each thread.
2016-03-19 02:07:31 -04:00
Joshua Holmer
262bbf003a Release version 0.2.1 [ci skip] 2016-03-10 14:50:35 -05:00
Joshua Holmer
f1e65067f6 Improve best-filter-per-line heuristic used in filter mode 5
Fixes #16
2016-03-10 14:23:03 -05:00
Joshua Holmer
eba8062ba5 Add documentation to publicly visible areas of lib
Fixes #17
2016-03-08 11:59:37 -05:00
Joshua Holmer
911f51faa9 Version 0.2.0 [ci skip] 2016-03-05 22:55:01 -05:00
Joshua Holmer
b889c73a3b Make --strip option more versatile
Closes #22
2016-03-05 22:36:31 -05:00
Joshua Holmer
7d1e3a5bb9 Print console output to stderr instead of stdout
Makes it friendlier with --stdout option
See #20 for discussion
2016-03-04 16:37:40 -05:00
Joshua Holmer
0ae632c7f4 Revert "Enable quiet when stdout is selected"
This reverts commit 849d36ec6c.
2016-03-04 16:03:33 -05:00
Joshua Holmer
c6452beb12 Select compression and filter modes heuristically for -o1
Closes #21
2016-03-04 15:24:58 -05:00
Joshua Holmer
849d36ec6c Enable quiet when stdout is selected 2016-03-04 14:20:47 -05:00
SethDusek
d218d37944 Actually be quiet 2016-03-04 21:38:26 +05:00
Joshua Holmer
9a6379ac7e Fix version string from -V 2016-03-04 10:07:43 -05:00
Joshua Holmer
abedfc9c70 Each input file should output to its own file correctly
Fixes #15
2016-03-03 16:30:05 -05:00
Joshua Holmer
9a8c3f64b9 Fix alternative filter modes
Fixes #9
2016-03-03 13:52:52 -05:00
Joshua Holmer
3963f8da0a Prefer unreachable over panic where appropriate 2016-03-02 14:16:34 -05:00
Joshua Holmer
9fa55ae34a Fix all bit depth and color reduction tests
Closes #8
2016-03-02 12:40:56 -05:00
Joshua Holmer
6f1a87160a Fix all existing color reduction tests
Fixes #1
2016-02-23 13:28:39 -05:00
Joshua Holmer
d2cd105b1a Fix most of rgba tests 2016-02-22 22:40:17 -05:00
Joshua Holmer
30f03678d2 Fix filtering, passes some more tests 2016-02-21 23:27:19 -05:00
Joshua Holmer
675a28ee32 Correctly save best run
Fixes #10
2016-02-20 14:49:33 -05:00
Joshua Holmer
9d48ae911e A few inconsequential changes 2016-02-20 02:58:51 -05:00
Joshua Holmer
6c355b0c83 OH MY GOSH A TEST PASSED 2016-02-19 15:24:43 -05:00
Joshua Holmer
677ce14b96 Improve palette downgrading 2016-02-19 14:48:52 -05:00
Joshua Holmer
5c0bbbe2bb Fix many issues 2016-02-18 16:23:16 -05:00
Joshua Holmer
60cf7c96e7 Fix some clippy lints 2016-02-16 09:56:30 -05:00
Joshua Holmer
08e6d42021 Implement multithreading for deflate passes
Closes #6
2016-02-04 10:32:20 -05:00
Joshua Holmer
4894c4a072 Make our tests fail again
Although now they test that the conversion was lossless,
which is extremely important for this program to be useful
2016-01-18 20:03:39 -05:00
Joshua Holmer
e4c9aca4a5 Fix outputting IHDR twice 2016-01-16 14:30:05 -05:00
Joshua Holmer
0866eb01ea Only change interlacing if we have to 2016-01-15 13:35:41 -05:00
Joshua Holmer
c9ea565d1d Formatting 2016-01-14 15:22:21 -05:00
Joshua Holmer
ab15fc1d61 Color reduction 2016-01-14 13:24:56 -05:00
Joshua Holmer
0acd44e1b2 More color reduction 2016-01-13 10:22:04 -05:00
Joshua Holmer
c63c40b303 Correctly write transparency palette back out 2016-01-12 13:23:52 -05:00
Joshua Holmer
534ba84052 Add quite a few things, including parsing transparency headers 2016-01-12 13:16:57 -05:00
Joshua Holmer
9267f040af Implement bit depth reduction 2016-01-12 11:50:39 -05:00
Joshua Holmer
939d886932 Add header stripping 2016-01-12 11:06:52 -05:00
Joshua Holmer
fe95e9460e Fix output crcs 2016-01-11 21:22:08 -05:00
Joshua Holmer
ee31774078 Add basic integration tests
Also add force option--necessary for testing but may be useful to some people
who like to live dangerously
2016-01-11 14:16:05 -05:00
Joshua Holmer
12b472e572 Rename project 2016-01-11 11:03:52 -05:00
Joshua Holmer
acc0b6c5ac Cargo fmt and clippy 2016-01-11 01:06:12 -05:00
Joshua Holmer
11e475ba15 Implement heuristic filter mode and optimize modes 1-4 2016-01-11 01:01:53 -05:00
Joshua Holmer
4765c2133a Filtering, mostly 2016-01-10 23:24:02 -05:00
Joshua Holmer
e24fa4ae27 Run clippy and rustfmt 2016-01-10 15:13:12 -05:00
Joshua Holmer
471d5179d5 Write output files 2016-01-10 15:09:05 -05:00
Joshua Holmer
913d9e0c46 Minor typing optimizations 2016-01-08 16:20:04 -05:00
Joshua Holmer
5f866d9844 Completely parse CLI options 2016-01-08 15:09:00 -05:00
Joshua Holmer
273880ea0b Implement option parsing - Part 1
The compression options help text keeps getting split up by rustfmt.
Don't let it.
2016-01-07 16:29:02 -05:00
Joshua Holmer
052b047222 Get zlib compression to work 2016-01-01 01:00:57 -05:00
Joshua Holmer
9e1cf7881d Use our own libpng 2015-12-18 22:19:05 -05:00
Joshua Holmer
7d3a601686 So as to not lose my work 2015-12-16 08:01:05 -05:00