Merge branch '8.5'
This commit is contained in:
commit
a8fb38fb6a
@ -14,6 +14,8 @@
|
|||||||
12/6/17 started 8.5.7
|
12/6/17 started 8.5.7
|
||||||
- transform cmyk->rgb automatically on write if there's an embedded profile
|
- transform cmyk->rgb automatically on write if there's an embedded profile
|
||||||
and the saver does not support cmyk
|
and the saver does not support cmyk
|
||||||
|
- fix DPI mixup in svgload ... we were writing images about 20% too large,
|
||||||
|
thanks Fosk
|
||||||
|
|
||||||
19/5/17 started 8.5.6
|
19/5/17 started 8.5.6
|
||||||
- tiff read with start page > 0 could break edge tiles or strips
|
- tiff read with start page > 0 could break edge tiles or strips
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
* - add svgz support
|
* - add svgz support
|
||||||
* 18/1/17
|
* 18/1/17
|
||||||
* - invalidate operation on read error
|
* - invalidate operation on read error
|
||||||
|
* 8/7/17
|
||||||
|
* - fix DPI mixup, thanks Fosk
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -107,21 +109,6 @@ vips_foreign_load_svg_dispose( GObject *gobject )
|
|||||||
dispose( gobject );
|
dispose( gobject );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
vips_foreign_load_svg_build( VipsObject *object )
|
|
||||||
{
|
|
||||||
VipsForeignLoadSvg *svg = (VipsForeignLoadSvg *) object;
|
|
||||||
|
|
||||||
if( !vips_object_argument_isset( object, "scale" ) )
|
|
||||||
svg->scale = svg->dpi / 72.0;
|
|
||||||
|
|
||||||
if( VIPS_OBJECT_CLASS( vips_foreign_load_svg_parent_class )->
|
|
||||||
build( object ) )
|
|
||||||
return( -1 );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
static VipsForeignFlags
|
static VipsForeignFlags
|
||||||
vips_foreign_load_svg_get_flags_filename( const char *filename )
|
vips_foreign_load_svg_get_flags_filename( const char *filename )
|
||||||
{
|
{
|
||||||
@ -143,6 +130,7 @@ vips_foreign_load_svg_parse( VipsForeignLoadSvg *svg,
|
|||||||
RsvgDimensionData dimensions;
|
RsvgDimensionData dimensions;
|
||||||
double res;
|
double res;
|
||||||
|
|
||||||
|
rsvg_handle_set_dpi( svg->page, svg->dpi * svg->scale );
|
||||||
rsvg_handle_get_dimensions( svg->page, &dimensions );
|
rsvg_handle_get_dimensions( svg->page, &dimensions );
|
||||||
|
|
||||||
/* We need pixels/mm for vips.
|
/* We need pixels/mm for vips.
|
||||||
@ -150,7 +138,7 @@ vips_foreign_load_svg_parse( VipsForeignLoadSvg *svg,
|
|||||||
res = svg->dpi / 25.4;
|
res = svg->dpi / 25.4;
|
||||||
|
|
||||||
vips_image_init_fields( out,
|
vips_image_init_fields( out,
|
||||||
dimensions.width * svg->scale, dimensions.height * svg->scale,
|
dimensions.width, dimensions.height,
|
||||||
4, VIPS_FORMAT_UCHAR,
|
4, VIPS_FORMAT_UCHAR,
|
||||||
VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, res, res );
|
VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, res, res );
|
||||||
|
|
||||||
@ -194,9 +182,7 @@ vips_foreign_load_svg_generate( VipsRegion *or,
|
|||||||
cr = cairo_create( surface );
|
cr = cairo_create( surface );
|
||||||
cairo_surface_destroy( surface );
|
cairo_surface_destroy( surface );
|
||||||
|
|
||||||
cairo_scale( cr, svg->scale, svg->scale );
|
cairo_translate( cr, -r->left, -r->top );
|
||||||
cairo_translate( cr,
|
|
||||||
-r->left / svg->scale, -r->top / svg->scale );
|
|
||||||
|
|
||||||
/* rsvg is single-threaded, but we don't need to lock since we're
|
/* rsvg is single-threaded, but we don't need to lock since we're
|
||||||
* running inside a non-threaded tilecache.
|
* running inside a non-threaded tilecache.
|
||||||
@ -272,7 +258,6 @@ vips_foreign_load_svg_class_init( VipsForeignLoadSvgClass *class )
|
|||||||
|
|
||||||
object_class->nickname = "svgload";
|
object_class->nickname = "svgload";
|
||||||
object_class->description = _( "load SVG with rsvg" );
|
object_class->description = _( "load SVG with rsvg" );
|
||||||
object_class->build = vips_foreign_load_svg_build;
|
|
||||||
|
|
||||||
load_class->get_flags_filename =
|
load_class->get_flags_filename =
|
||||||
vips_foreign_load_svg_get_flags_filename;
|
vips_foreign_load_svg_get_flags_filename;
|
||||||
@ -557,8 +542,8 @@ vips_foreign_load_svg_buffer_init( VipsForeignLoadSvgBuffer *buffer )
|
|||||||
* Render a SVG file into a VIPS image. Rendering uses the librsvg library
|
* Render a SVG file into a VIPS image. Rendering uses the librsvg library
|
||||||
* and should be fast.
|
* and should be fast.
|
||||||
*
|
*
|
||||||
* Use @dpi to set the rendering resolution. The default is 72. Alternatively,
|
* Use @dpi to set the rendering resolution. The default is 72. You can also
|
||||||
* you can scale the rendering from the default 1 point == 1 pixel by @scale.
|
* scale the rendering by @scale.
|
||||||
*
|
*
|
||||||
* This function only reads the image header and does not render any pixel
|
* This function only reads the image header and does not render any pixel
|
||||||
* data. Rendering occurs when pixels are accessed.
|
* data. Rendering occurs when pixels are accessed.
|
||||||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
@ -1,3 +1,58 @@
|
|||||||
<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 595 842">
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<path stroke="#fff" fill="#fff" d="M0 0h595v842H0z"/>
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1"
|
||||||
|
viewBox="0 0 793.70079 1122.5197"
|
||||||
|
id="svg4"
|
||||||
|
sodipodi:docname="blankpage.svg"
|
||||||
|
width="210mm"
|
||||||
|
height="297mm"
|
||||||
|
inkscape:version="0.92.1 r15371">
|
||||||
|
<metadata
|
||||||
|
id="metadata10">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs8" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1052"
|
||||||
|
id="namedview6"
|
||||||
|
showgrid="false"
|
||||||
|
units="mm"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:zoom="0.28028504"
|
||||||
|
inkscape:cx="308.20339"
|
||||||
|
inkscape:cy="421"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg4" />
|
||||||
|
<path
|
||||||
|
d="M 0,280.51969 H 595 V 1122.5197 H 0 Z"
|
||||||
|
id="path2"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="fill:#ffffff;stroke:#ffffff" />
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 137 B After Width: | Height: | Size: 1.6 KiB |
BIN
test/images/blankpage.svg.png
Normal file
BIN
test/images/blankpage.svg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
@ -595,9 +595,9 @@ class TestForeign(unittest.TestCase):
|
|||||||
|
|
||||||
def svg_valid(self, im):
|
def svg_valid(self, im):
|
||||||
a = im(10, 10)
|
a = im(10, 10)
|
||||||
self.assertAlmostEqualObjects(a, [0, 0, 77, 255])
|
self.assertAlmostEqualObjects(a, [79, 79, 132, 255])
|
||||||
self.assertEqual(im.width, 360)
|
self.assertEqual(im.width, 288)
|
||||||
self.assertEqual(im.height, 588)
|
self.assertEqual(im.height, 470)
|
||||||
self.assertEqual(im.bands, 4)
|
self.assertEqual(im.bands, 4)
|
||||||
|
|
||||||
self.file_loader("svgload", self.svg_file, svg_valid)
|
self.file_loader("svgload", self.svg_file, svg_valid)
|
||||||
|
@ -10,11 +10,11 @@ set -e
|
|||||||
|
|
||||||
# poppler / pdfload reference image
|
# poppler / pdfload reference image
|
||||||
poppler=$test_images/blankpage.pdf
|
poppler=$test_images/blankpage.pdf
|
||||||
poppler_ref=$test_images/blankpage.png
|
poppler_ref=$test_images/blankpage.pdf.png
|
||||||
|
|
||||||
# rsvg / svgload reference image
|
# rsvg / svgload reference image
|
||||||
rsvg=$test_images/blankpage.svg
|
rsvg=$test_images/blankpage.svg
|
||||||
rsvg_ref=$test_images/blankpage.png
|
rsvg_ref=$test_images/blankpage.svg.png
|
||||||
|
|
||||||
# giflib / gifload reference image
|
# giflib / gifload reference image
|
||||||
giflib=$test_images/trans-x.gif
|
giflib=$test_images/trans-x.gif
|
||||||
@ -139,13 +139,14 @@ test_loader() {
|
|||||||
ref=$1
|
ref=$1
|
||||||
in=$2
|
in=$2
|
||||||
format=$3
|
format=$3
|
||||||
|
thresh=$4
|
||||||
|
|
||||||
printf "testing $(basename $in) $format ... "
|
printf "testing $(basename $in) $format ... "
|
||||||
|
|
||||||
$vips copy $ref $tmp/before.v
|
$vips copy $ref $tmp/before.v
|
||||||
$vips copy $in $tmp/after.v
|
$vips copy $in $tmp/after.v
|
||||||
|
|
||||||
test_difference $tmp/before.v $tmp/after.v 0
|
test_difference $tmp/before.v $tmp/after.v $thresh
|
||||||
|
|
||||||
echo "ok"
|
echo "ok"
|
||||||
}
|
}
|
||||||
@ -230,19 +231,20 @@ test_raw $mono
|
|||||||
test_raw $image
|
test_raw $image
|
||||||
|
|
||||||
if test_supported pdfload; then
|
if test_supported pdfload; then
|
||||||
test_loader $poppler_ref $poppler pdfload
|
test_loader $poppler_ref $poppler pdfload 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test_supported svgload; then
|
if test_supported svgload; then
|
||||||
test_loader $rsvg_ref $rsvg svgload
|
# librsvg can give small differences on some platforms
|
||||||
|
test_loader $rsvg_ref $rsvg svgload 10
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test_supported gifload; then
|
if test_supported gifload; then
|
||||||
test_loader $giflib_ref $giflib gifload
|
test_loader $giflib_ref $giflib gifload 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test_supported matload; then
|
if test_supported matload; then
|
||||||
test_loader $matlab_ref $matlab matlab
|
test_loader $matlab_ref $matlab matlab 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test_supported dzsave; then
|
if test_supported dzsave; then
|
||||||
|
Loading…
Reference in New Issue
Block a user