Re: [GM-apis] Evaluate/Operator in perl API
Swiss army knife of image processing
Brought to you by:
bfriesen
From: Didster <di...@gm...> - 2015-09-18 08:05:20
|
Hi Bob, Thanks for your response. Happy to provide some examples. Attached are: 160.jpg - The source file heamar6_logo.png - The watermark I am trying to overlay 160-watermark-im-evaluate.jpg - The results using image magick using Evaluate to change the opacity prior to overlaying using Compose - perfect. 160-watermark-im-oc.jpg - The results using image magick using Compose specifying an opacity. It works, but seems to mess up the transparent background of the watermark. I found other posts about this which led me to Evaluate 160-watermark-gm-no-oc.jpg - The results using Graphics magick with no opacity during Compose. This works, although the position is off but thats probably something else 160-watermark-gm-oc.jpg - The results using Graphics magick with opacity on Compose. GM seems to take a 0.0->1.0 float for this value vs IM which takes a percentage string like "20%" but other than that, no changes. Image file is lost with a messed up watermark The code for this is at the bottom of this mail. I will take a look at CopyOpacity but in the mean time, I'm implementing a fork using IM. Cheers Simon #!/usr/bin/perl use strict; use warnings; use Data::Dumper; use lib "../libs"; #use Image::Magick; use Graphics::Magick; my $id = 160; my $mainImgFile = "$id.jpg"; my $mainImgFileAndFolder = File::Spec->catfile( ".", $mainImgFile ); my $wmImgFile = "$id-watermark.jpg"; my $wmImgFileAndFolder = File::Spec->catfile( ".", $wmImgFile ); print "write ", $wmImgFileAndFolder, "\n"; my $mainImageHandle = Graphics::Magick->new(); $x = $mainImageHandle->read( $mainImgFileAndFolder ); die($x) if($x); my $mWidth = $mainImageHandle->get('width'); my $mHeight = $mainImageHandle->get('height'); my $srcWmOverlay = Graphics::Magick->new(); $x = $srcWmOverlay->read( "heamar6_logo.png" ); die $x if($x); $srcWmOverlay->Set( Background => 'None' ); $srcWmOverlay->Set( Gravity => 'Center' ); $srcWmOverlay->Resize( geometry => sprintf('%dx%d', int(( $mWidth*0.70 )), $mHeight ) ); my $srcWmOverlayBg = Graphics::Magick->new( size => sprintf('%dx%d', $mWidth, $mHeight ) ); $srcWmOverlayBg->Set( Gravity => 'Center' ); $srcWmOverlayBg->Read("xc:transparent"); $srcWmOverlayBg->Composite( compose => 'Over', image => $srcWmOverlay ); #$srcWmOverlayBg->Evaluate( # operator => 'Multiply', # value => 0.2, # channel => 'Alpha', #); $mainImageHandle->Set( Background => 'None' ); $mainImageHandle->Set( Gravity => 'Center' ); $mainImageHandle->Composite( compose => 'Over', image => $srcWmOverlayBg, opacity => 0.2 ); # Or 20% for IM $x = $mainImageHandle->Write( $wmImgFileAndFolder ); die $x if ($x); undef( $srcWmOverlayBg ); undef( $mainImageHandle ); On Thu, Sep 17, 2015 at 2:51 PM, Bob Friesenhahn < bfr...@si...> wrote: > On Wed, 16 Sep 2015, Didster wrote: > > Hi, >> I'm looking to switch to GM from IM for a script that I have that >> processes around about 60,000 images as IM is >> god awful slow after the first 1000 or so, even with MP support complied >> out. Each source image is resized to a >> number of destination sizes by: >> >> 1. Resize the actual image, if the destination is smaller >> 2. Center the actual image in a white background the size of the >> destination >> 3. Overlay a "watermark" which has been made transparent to different >> levels using IM >> >> For step 2, I was using IM->Extent() which doesnt seem to exist in GM so >> instead I'm now creating a blank white >> background and Composing the image over the top, that works fine. >> > > I must apologize for not keeping the PerlMagick API in sync with the > GraphicsMagick APIs. The enumeration values have been kept in sync, but I > have not been adding new commands like 'extent' or 'operator'. Regardless, > the GraphicsMagick variant of PerlMagick should run well since it is an > important part of the test suite. > > Software which runs slower and slower may be running slower due to memory > leaks. > > Thousands of memory leaks have been fixed in GraphicsMagick since the fork > from ImageMagick. ImageMagick was originally utilities which ran and then > quit so memory leaks were not very important. > > On Unix type systems, there is a simple "fix" for memory leak problems in > a leaky PerlMagick. The "fix" is to do all image processing in a forked > process (fork()) which quits after processing a few images. > > For step 3, I was using something like this: >> >> $wmFileHandle->Evaluate( >> operator => 'Multiply', >> value => $opacity, >> channel => 'Alpha', >> ); >> >> Where $opacity is an float from 0.0 to 1.0. >> >> What would be the equivalent in GM for Perl? I know using convert its >> "-operator" e.g. >> >> gm convert input.png -operator Opacity Multiply 0.5 output.png >> > > Perhaps using one of the Composite operators would suffice. It is > possible to insert an opacity channel using CopyOpacity. I would need to > study the math to see if others may be used to manipulate the opacity. > > I have also tried leaving the watermark as fully opaque and then using >> >> $mainImageHandle->Composite( compose => 'Over', image => $wmFileHandle, >> opacity => $opacity ); >> >> But that gives corruption [the same problem I was having with IM, which >> lead me to switch to Evaluate] >> > > What do you mean by "corruption"? Are you able to share some sample > images as well as the desired result? > > Don't ignore the 'Montage' operator. It may be convinced to do exactly > what you want. > > Bob > -- > Bob Friesenhahn > bfr...@si..., http://www.simplesystems.org/users/bfriesen/ > GraphicsMagick Maintainer, http://www.GraphicsMagick.org/ > > ------------------------------------------------------------------------------ > Monitor Your Dynamic Infrastructure at Any Scale With Datadog! > Get real-time metrics from all of your servers, apps and tools > in one place. > SourceForge users - Click here to start your Free Trial of Datadog now! > http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140 > _______________________________________________ > Graphicsmagick-apis mailing list > Gra...@li... > https://lists.sourceforge.net/lists/listinfo/graphicsmagick-apis > > |