I have a bunch of animated gifs that I would like to add rounded corners to. I have looked at this page:
http://www.imagemagick.org/Usage/thumbnails/#rounded
But unable to get the rounded corners to apply to an animated gif. Is it possible to do this with ImageMagick? Any help would be appreciated!
In Imagemagick, you need to use -layers composite with a null: separator as follows:
Unix Syntax:
Input:
convert animation.gif -coalesce \
null: \
\( animation.gif[0] -alpha extract \
-draw 'fill black polygon 0,0 0,15 15,0 fill white circle 15,15 15,0' \
\( +clone -flip \) -compose Multiply -composite \
\( +clone -flop \) -compose Multiply -composite \
\) \
-alpha off -compose CopyOpacity \
-layers composite \
-layers optimize \
animation_rounded.gif
See https://imagemagick.org/Usage/anim_mods/#composite
Because your output is GIF, which only supports binary transparency (off or on full), the corners will not be smoothly rounded.
Related
I want to make a children's treasure hunt where the next location is given by a picture e.g.
To make a more suitable printable picture, I can use -canny like this:
convert hut.jpg -canny 0x1+10%+30% -negate hutCanny.jpg
To make it more interesting, I was thinking that I want to make two images -one with horizontal lines and one with vertical lines:
convert hut.jpg -colorspace gray -morphology Convolve Sobel -negate hutH.jpg
convert hut.jpg -colorspace gray -morphology Convolve Sobel:90 -negate hutV.jpg
I would like the location to be only guessable when both picture are found and can be combined using a light source. The problem is that Sobel not only detects vertical lines but also angled lines. As can be seen, the location is far too easy to recognise with just one picture. I have been trying with different kernels and trying to erode the pictures. -nothing woks.
How do I make two images that by themselves are not 'guessable' but can be combined to one. e.g. by making one image with only near horizontal lines and an other with only near vertical lines?
You could do something like the following in ImageMagick. Make a random mask and apply it to the image. Then invert the mask and do the same. The two images, when added together, will make the input.
Input:
convert \( hut.png -write mpr:img +delete \) \
\( mpr:img +noise random -channel g -separate +channel -blur 0x5 -threshold 50% +write mpr:mask +delete \) \
\( mpr:img mpr:mask -compose multiply -composite +write hut_out1.png \) \
\( mpr:img \( mpr:mask -negate \) -compose multiply -composite +write hut_out2.png \) \
null:
Output 1:
Output 2:
ADDITION
If it has to be grayscale, then you can do the above and make each output gray.
convert \( hut.png -write mpr:img +delete \) \
\( mpr:img +noise random -channel g -separate +channel -blur 0x5 -threshold 50% +write mpr:mask +delete \) \
\( mpr:img mpr:mask -compose multiply -composite -colorspace gray +write hut_out1.png \) \
\( mpr:img \( mpr:mask -negate \) -compose multiply -composite -colorspace gray +write hut_out2.png \) \
null:
Output 1:
Output 2:
Now add them together to reconstitute:
convert hut_out1.png hut_out2.png -evaluate-sequence add hut_out12.png
We need to put 'information bar's to thousands of image files. For like a week or so i'm trying to learn imagemagick but i just couldn't figure this many elements out so i wanted to ask for a help here.
I get the idea of '-/+append'ing elements and swapping between them but when it comes to 3x3 matrix cells and text/image mixings, i just can't do it. As an example, i can get the 3 rows appended and a column next to it but i can't get to the next step of 'appending 2 more rows together then put them as a column block again' because when i try, all those append gets right or bottom as a whole image.. Well, you will get the idea when you see my brief image below..
magick.exe -size 150x100 -gravity center caption:"txt2" caption:"txt3" caption:"txt4" \
-append -size 94x294 xc:white -border 3 -swap 0,1 \
+append outoutout.jpg
FYI, height/width of rows/columns are there just for example not important.. And here comes MSPaint skills:
You have to create each section separately using parenthesis processing. Then if you want append them appropriately. Alternately, you can create a background image and compose ... -composite each image into its correct location.
Here is an example in ImageMagick using the second method.
Unix Syntax:
magick -size 400x400 xc:white \
\( barn.jpg -crop 400x200+0+0 +repage \) \
-geometry +0+0 -compose over -composite \
\( -size 100x200 xc:white -shave 5x5 -bordercolor black -border 5 \) \
-gravity northwest -geometry +0+200 -compose over -composite \
\( -size 100x200 -background white -gravity center -fill black \
-font Candice label:"Text1\n\nText2\n\nText3" \) \
-gravity northwest -geometry +100+200 -compose over -composite \
\( -size 100x200 -background skyblue -gravity center -fill red \
-font Arial label:"First_line\n\n\nSecond_line" \) \
-gravity northwest -geometry +300+200 -compose over -composite \
result.png
See for example:
parenthesis processing
appending
convert ... -composite
I'm trying to find a good way to add a 3px white stroke to a ton of png files, effectively to make them look like "stickers." I've got some sample code that does a decent job, but I can't seem to get the cropping right. Also, the stroke looks a bit pixelated and I wanted to know if it's possible to get cleaner edges!
I did a bunch of internet scouring, found some sample code, tweaked it around, and came to something that almost resembles what I'm looking for. The images are always going to be PNGs, so I looked into things like inkscape/gimp from the command line but realized I should be able to do this just using convert from the terminal.
convert in.png \
\( -clone 0 -alpha extract -threshold 0 \) \
\( -clone 1 -blur 10x65000 -threshold 0 \) \
\( -clone 2 -fill red -opaque white \) \
\( -clone 3 -clone 0 -clone 1 -alpha off -compose over -composite \) \
-delete 0,1,3 +swap -alpha off -compose copy_opacity -composite \
out.png
in:
out:
ideally:
Your main problem is it is that you do not have enough space bettween your object and the sides of the image. You just need to add your image with transparency and then remove any excess later.
In ImageMagick 6, this should do what you want.
1) read the input
2) add a larger border than you need to add
3) extract the alpha channel from the input and dilate it by the amount of border (in this case 10)
4) copy the previous image and color the white as red and the black as transparent
5) composite the original over the red/transparent image
6) delete the original and the red/transparent image
7) swap the composite with the dilated alpha channel and put the dilated alpha channel into the alpha channel of the previous image
8) trim the excess transparency from the border padding
9) save to output
convert img.png \
-bordercolor none -border 20 \
\( -clone 0 -alpha extract -morphology dilate diamond:10 \) \
\( -clone 1 -fuzz 30% -fill red -opaque white -fill none -opaque black \) \
\( -clone 2,0 -compose over -composite \) \
-delete 0,2 \
+swap -alpha off -compose copy_opacity -composite \
-trim +repage \
result.png
For ImageMagick 7, replace convert with magick.
If on a Unix-like system, you might be interested in my bash ImageMagick script, contour, at http://www.fmwconcepts.com/imagemagick/index.php
A better result can be achieved by replacing diamond:10 with disk:10
I want to create a 3D effect on an image so it looks like a folder, using the +distort Perspective' commands from ImageMagick.
However, if I use the distort multiple times (on different layers) in ImageMagick the result doesn't look correct.
Please see the attached image, left is correct, but the top-right corner of the right image looks strange.
I have used the following commands:
convert square.jpg -brightness-contrast 0x0 -resize 700x700 \
\( -clone 0 -flip -crop 700x140+0-0 -size 700x140 gradient:gray60-black -compose CopyOpacity -composite \) \
-append front.png
convert square.jpg -brightness-contrast -50x0 -resize 700x700 \
\( -clone 0 -flip -crop 700x140+0-0 -size 700x140 gradient:gray60-black -compose CopyOpacity -composite \) \
-append inner.png
convert -background None -virtual-pixel transparent -background white \
\( inner.png +distort Perspective '0,0 0,0 700,0 735,-35 700,700 735,665 0,700 0,700' \) \
\( front.png +distort Perspective '0,0 0,0 700,0 665,35 700,700 665,735 0,700 0,700' \) \
-layers merge +repage 3dimage.jpg
I'm using ImageMagick v6.8
I'm not sure if I understand the layers in ImageMagick correctly.
Can someone see what's wrong? Thanks!
I'm not sure if I understand the layers in ImageMagick correctly. Can someone see what's wrong?
You're doing fine. Just need to repeat the -virtual-pixel transparent on the sub-image for front.png (and perhaps the inner.png too).
convert -background None -virtual-pixel transparent -background white \
\( inner.png +distort Perspective '0,0 0,0 700,0 735,-35 700,700 735,665 0,700 0,700' \) \
\( front.png -virtual-pixel transparent +distort Perspective '0,0 0,0 700,0 665,35 700,700 665,735 0,700 0,700' \) \
-layers merge +repage 3dimage.jpg
Hi I would like to create a mask image with "special corners" I am calling them special because I don't really know how to call them in english here is what I would like to achieve:
what I am using now is
convert xc:black -size 300x300 -fill white -draw "roundrectangle 3,3,296,296,5,5"
but this gives me rounded corners. Thank you in advance for any suggestions.
Here's one way of doing it.
convert -size 300x300 xc:none \
-shave 10 -bordercolor black -border 10 \
-fill black -draw "polyline 0,0 30,0 0,30" \
\( +clone -flip \) -gravity north -composite \
\( +clone -flop \) -gravity south -composite -background white -flatten result.png
That says... "Draw a rectangle your full size and transparent, shave 10 pixels off all round and add a 10 pixel black border (easier than doing the maths and making a 280x280 and adding 10 on each side). Draw a triangle in the top-left. Copy the whole shape and flip it and draw it on top of the original. Copy the whole shape and flop it and draw it again on the original. Now make all the transparent areas white."
Here is another way - maybe a little easier. Draw the original square, then copy it, enlarge it by square-root(2) (i.e. 141%), thicken the borders, rotate 45 degrees and composite it onto itself. Kinda depends how your brain works!
magick -size 300x300 xc:none -shave 10 -bordercolor black -border 10 \
\( +clone -scale 142% -shave 30 -border 30 -rotate 45 \) \
-gravity center -composite -background white -flatten result.png
Here is a link to a page showing how to do what you want along with other effects https://www.imagemagick.org/Usage/thumbnails/#rounded
This is the code from the page:
convert thumbnail.gif -alpha set -compose DstOut \
\( -size 20x15 xc:none -draw "polygon 0,0 0,14 19,0" \
-write mpr:triangle +delete \) \
\( mpr:triangle \) -gravity northwest -composite \
\( mpr:triangle -flip \) -gravity southwest -composite \
\( mpr:triangle -flop \) -gravity northeast -composite \
\( mpr:triangle -rotate 180 \) -gravity southeast -composite \
corner_cutoff.png
You should check out the examples as there is another method you could use for smaller images.