* seems to export to cmyk+2 correctly
We'll need something fancier for import.
* more hacking
* Revert "more hacking"
This reverts commit fcdad5b491fc4d5a1750388947e42d1e98b1d9d7.
* generalise to many colour export
Should work up to 12 colour profiles (all that lcms supports).
* support import with N-colour profiles
* spngsave: ensure quantisation occurs last
i.e. after setting the metadata and phyiscal pixel dimensions,
since quantisation will overwrite the image.
* spngsave: avoid over-allocation of temporary buffer
For low-bitdepth write and palette-based output.
* reducev: initialize the sum with the addition
Avoids an Orc opcode.
* convi: initialize the sum with the addition
Avoids an Orc opcode.
* vector: add comments to magic numbers
* Inverted order of TIFF tag writing when saving multi-page subifd pyramids to ensure that subifd pyramid layers are correctly tagged as reduced-image subfile type and not as pages
* Use if-else clause to avoid tag overwriting
We added a check that loader ->header() and ->load() methods set the
same dhint. This commit removes that check -- it's not possible to make
header and load match in all cases since images can take so many routes,
and can change between the two events.
If we see performance issues around inappropriate cache sizing again,
try to fix just those cases.
* webpsave: switch to sink_disc
* fix some warnings
* distinguish between animated and single image write
* fix some formatting issues
* add missing comments
* fix webpsave_mime
* don't use sink_disc for single image webp write
* fix potential segv/double free
* update changelog
* remove leftover function declaration
* Revert "don't use sink_disc for single image webp write"
This reverts commit a75922ca93ee8987fa5e1ffc52b68e22bd6fb1fb.
* implement review feedback
* adjust to a column size of 80
* get contiguous RGB(A) buffer directly from VipsRegion
* Revert "get contiguous RGB(A) buffer directly from VipsRegion"
This reverts commit 84fc10e52fb223f0208c605dde92d3f821ceee0e.
* accumulate image data directly in frame_bytes buffer
* switch WebP back to Webp naming scheme
* rename page_index to page_number
* revise formatting
Add a check that header and load methods agree on the demand hint, and
make sure all loaders pass.
If they disagree, you can get bad performance in some cases, since the
pipeline can be built from the header dhint.
* move tiff decompress outside lock
Most time in TIFF read is spent in decompression. If we move this
outside the lock, we can get a useful speedup.
This commit adds the machinery to move the lock to before decompress, so
jp2k decompression is now threaded.
Before:
```
$ vips copy wtc.jpg x.tif[tile,compression=jp2k]
$ time vips avg x.tif
117.249845
real 0m15.085s
user 0m16.155s
sys 0m0.109s
```
After:
```
$ time vips avg x.tif
117.249845
real 0m1.207s
user 0m18.384s
sys 0m0.369s
```
* start moving jpg decode outside the lock
* move jpeg decompress outside the lock
seems to work
* add some more tile size checks
double-check jpeg tile size before decode
* fix tiffload demand hinting
We were not setting the hint correctly in header load, and we were not
hinting smalltile for tiled TIFFs.
SOme combinations of high bitdepth images with low bitdepth PNG save could
produce incorrect images, for example saving a 16-bit fourier image as 1-bit.
Having a different colorspace and chroma subsampling just because the
source image happens to be an even or odd number of pixels is surprising
and hard to debug, so let's remove it.
We were avoiding /0 by testing for alpha==0, however, this will still
allow very small values of alpha to generate +/- Inf. Instead, check for
abs(alpha)<epsilon.
Fixes some artifacts after unpremul.
We were minimising at the end of threadpool_run, but this was being
called for each sinkscreen render pass, so we were throwing away the
display cache.
Instead, minimise after sink, sink_memory and sink_disc.
To disable DoS limits for JPEG loading. Adding API on a stable branch is
bad, but this fixes a regression, so I think it's necessary,
unfortunately.
See https://github.com/libvips/libvips/issues/2973
* Allow to modify/create EXIF GPS* tags
Make `tag_is_ascii` aware of the EXIF GPS* ASCII tags that are
available since libexif 0.6.23.
See: https://github.com/lovell/sharp/issues/2767
* Add tests
* Remove `glib-mkenums` autotools templates and generated files
Meson uses the `enumtypes.c.in` and `enumtypes.h.in` in
`libvips/include/vips` and doesn't use the pre-generated
files.
* Remove man files for no longer existing tools
+ update the `meson.build`.
* Remove Autotools section in `.gitignore`
* Remove `po/messages` left-over
* Remove `g-ir-scanner` entry point
No longer needed by Meson.
* Remove `glib-genmarshal` generated files
Meson doesn't use these pre-generated files.
* Remove Autotools specific Git attributes
* Remove no longer existing tools in `.gitignore`
* Remove Make specific things in `.gitignore`
* Rename COPYING to LICENSE
* Remove no longer needed `.gitignore` sections
Meson only supports out-of-tree builds. This assumes that the
build directory is ignored.
* Remove no longer needed `.editorconfig` sections
The `*_class_intern_init` functions have already been patched within
wasm-vips to include the missing `class_data` member, so this adapter
function was not needed.
* Avoid writing the full path in enumtypes.h
Helps reproducible builds, as build paths can vary between builds.
* Use g_intern_static_string() for enum/flags type names
We are emitting a static string, so use that shortcut function to
intern it, which will save one allocation.
* Use g_once_init_enter/leave to register enum/flags type names
This is the more modern way, and ensures thread-safety.
1. Convert MULTIBAND uint/short/etc. as we convert uint8 images. They
are probably just uint8 that have been cast up in format.
2. Don't check that the image interpretation is a supported colourspace
before calling vips_colourspace() ... we want to fail with an error
if it can't be converted, not silently accept the image.
Loaders which supported random access would not set the seq flag even if
seq mode was requested.
This would make operations like shrinkv to not run in seq mode, causing
massive cache thrashing.
See https://github.com/libvips/libvips/discussions/2898