将图像 magick 转换命令转换为 magick++ c++ 代码
Converting image magick convert command to magick++ c++ code
将图像 magick 命令转换为 magick++ c++ 代码
我是 Magick++ 新手。我正在开发一个动态制作按钮图像对象的项目。浏览一些帮助页面,我能够创建以下转换命令来执行我想要的操作。现在我正在尝试将其迁移到 C++。在此先感谢您的帮助。
convert \( -size 110x30 xc:none -fill '#bdbdbd' -draw 'roundrectangle 0,0 109,29 5,5' \) \
\( -clone 0 -alpha extract \) \
\( -clone 0 -bordercolor none -border 9 -channel rgba -blur 9x65000 -shave 9x9 \) \
-delete 0 +swap -alpha off -compose copy_opacity -composite -auto-level -alpha off +level-colors '#0D5A84','#19AAF9' -alpha on tmp-1.png
double width = 110.0;
double height = 30.0;
Magick::Image button(Magick::Geometry(width, height), "none");
button.fillColor("#bdbdbd"); // Fill color
button.draw(Magick::DrawableRoundRectangle(0.0/*XCenter*/, 0.0/*YCenter*/,
width-1.0, height-1.0, 5.0/*cornerWidth*/, 5.0/*cornerHeight*/));
// \( -clone 0 -alpha extract \)
Magick::Image layer1(button);
layer1.alpha(); // how to set alpha extract and how this layer is used?
//\( -clone 0 -bordercolor none -border 9 -channel rgba -blur 9x65000 -shave 9x9 \)
Magick::Image layer2(button);
layer2.bordercolor("none");
layer2.border(Magick::border()); //parameter is of type Geometry not double
layer2.channel(RGBChannels); //rgba
layer2.blur(9, 65000);
layer2.shave(Magick::Geometry(9, 9));
//how to -delete 0
//how to +swap
button.alpha(false);
button.composite(layer2, "+0+0", MagickCore::CompositeOperator::OverCompositeOp); //-compose copy_opacity -composite
button.alpha(false);
//how to level colors
button.alpha(true);
button.write("button.png");
很高兴为您提供帮助,但以后请尽量保持 minimal reproducible 问题。一堆问题很难回答。
// \( -clone 0 -alpha extract \)
Magick::Image layer1(button);
layer1.alpha(); // how to set alpha extract and how this layer is used?
使用 Magick::Image.alphaChannel(Magick::ExtractAlphaChannel)
而不是 Magick::Image.alpha()
。
layer2.border(Magick::border()); //parameter is of type Geometry not double
CLI 行为知道 -border 9
确实意味着 -border 9x9
,因此几何应该反映这一点。
layer2.border(Magick::Geometry(9, 9));
//how to -delete 0
//how to +swap
您可以在使用 OOP 语言时忽略这些运算符 --- 也就是说 ---- 您已经在使用实例变量进行操作。注意操作顺序即可。
//how to level colors
啊!现在这是一个棘手的问题。使用 Magick++ 你会调用 Magick::Image.levelColors()
,但 CLI 命令调用 +level-colors
——这是称为 levelize
的逆方法,但 Magick++ 中不存在 Magick::Image.levelizeColors()
(还).您必须找到替代解决方案。
方法 Magick::Image.levelizeChannel()
确实存在,所以一些快速的数学运算,您可以将颜色通道部分转换为白点和黑点。
/*
+level-colors '#0D____','#19____'
blackpoint = 3276.75 = 0x0D / 255.0 * QuantumRange
whitepoint = 5898.15 = 0x19 / 255.0 * QuantumRange
Where QuantumRange is usually 65535
*/
button.levelizeChannel(Magick::RedChannel, 3276.75, 5898.15);
/*
+level-colors '#__5A__','#__AA__'
blackpoint = 22937.25 = 0x5A / 255.0 * QuantumRange
whitepoint = 43253.1 = 0xAA / 255.0 * QuantumRange
Where QuantumRange is usually 65535
*/
button.levelizeChannel(Magick::GreenChannel, 22937.25, 43253.1);
/*
+level-colors '#____84','#____F9'
blackpoint = 33422.85 = 0x84 / 255.0 * QuantumRange
whitepoint = 63568.95 = 0xF9 / 255.0 * QuantumRange
Where QuantumRange is usually 65535
*/
button.levelizeChannel(Magick::BlueChannel, 33422.85, 63568.95);
更新
看来我忽略了 Magick::Image.levelColors()
方法的 invert
参数。忽略上面的变通方法levelizeChannel
,使用下面的方法....
// +level-colors '#0D5A84','#19AAF9'
button.levelColors(Magick::Color("#0D5A84"), Magick::Color("#19AAF9"), true);
将图像 magick 命令转换为 magick++ c++ 代码
我是 Magick++ 新手。我正在开发一个动态制作按钮图像对象的项目。浏览一些帮助页面,我能够创建以下转换命令来执行我想要的操作。现在我正在尝试将其迁移到 C++。在此先感谢您的帮助。
convert \( -size 110x30 xc:none -fill '#bdbdbd' -draw 'roundrectangle 0,0 109,29 5,5' \) \
\( -clone 0 -alpha extract \) \
\( -clone 0 -bordercolor none -border 9 -channel rgba -blur 9x65000 -shave 9x9 \) \
-delete 0 +swap -alpha off -compose copy_opacity -composite -auto-level -alpha off +level-colors '#0D5A84','#19AAF9' -alpha on tmp-1.png
double width = 110.0;
double height = 30.0;
Magick::Image button(Magick::Geometry(width, height), "none");
button.fillColor("#bdbdbd"); // Fill color
button.draw(Magick::DrawableRoundRectangle(0.0/*XCenter*/, 0.0/*YCenter*/,
width-1.0, height-1.0, 5.0/*cornerWidth*/, 5.0/*cornerHeight*/));
// \( -clone 0 -alpha extract \)
Magick::Image layer1(button);
layer1.alpha(); // how to set alpha extract and how this layer is used?
//\( -clone 0 -bordercolor none -border 9 -channel rgba -blur 9x65000 -shave 9x9 \)
Magick::Image layer2(button);
layer2.bordercolor("none");
layer2.border(Magick::border()); //parameter is of type Geometry not double
layer2.channel(RGBChannels); //rgba
layer2.blur(9, 65000);
layer2.shave(Magick::Geometry(9, 9));
//how to -delete 0
//how to +swap
button.alpha(false);
button.composite(layer2, "+0+0", MagickCore::CompositeOperator::OverCompositeOp); //-compose copy_opacity -composite
button.alpha(false);
//how to level colors
button.alpha(true);
button.write("button.png");
很高兴为您提供帮助,但以后请尽量保持 minimal reproducible 问题。一堆问题很难回答。
// \( -clone 0 -alpha extract \) Magick::Image layer1(button); layer1.alpha(); // how to set alpha extract and how this layer is used?
使用 Magick::Image.alphaChannel(Magick::ExtractAlphaChannel)
而不是 Magick::Image.alpha()
。
layer2.border(Magick::border()); //parameter is of type Geometry not double
CLI 行为知道 -border 9
确实意味着 -border 9x9
,因此几何应该反映这一点。
layer2.border(Magick::Geometry(9, 9));
//how to -delete 0 //how to +swap
您可以在使用 OOP 语言时忽略这些运算符 --- 也就是说 ---- 您已经在使用实例变量进行操作。注意操作顺序即可。
//how to level colors
啊!现在这是一个棘手的问题。使用 Magick++ 你会调用 Magick::Image.levelColors()
,但 CLI 命令调用 +level-colors
——这是称为 levelize
的逆方法,但 Magick++ 中不存在 Magick::Image.levelizeColors()
(还).您必须找到替代解决方案。
方法 Magick::Image.levelizeChannel()
确实存在,所以一些快速的数学运算,您可以将颜色通道部分转换为白点和黑点。
/*
+level-colors '#0D____','#19____'
blackpoint = 3276.75 = 0x0D / 255.0 * QuantumRange
whitepoint = 5898.15 = 0x19 / 255.0 * QuantumRange
Where QuantumRange is usually 65535
*/
button.levelizeChannel(Magick::RedChannel, 3276.75, 5898.15);
/*
+level-colors '#__5A__','#__AA__'
blackpoint = 22937.25 = 0x5A / 255.0 * QuantumRange
whitepoint = 43253.1 = 0xAA / 255.0 * QuantumRange
Where QuantumRange is usually 65535
*/
button.levelizeChannel(Magick::GreenChannel, 22937.25, 43253.1);
/*
+level-colors '#____84','#____F9'
blackpoint = 33422.85 = 0x84 / 255.0 * QuantumRange
whitepoint = 63568.95 = 0xF9 / 255.0 * QuantumRange
Where QuantumRange is usually 65535
*/
button.levelizeChannel(Magick::BlueChannel, 33422.85, 63568.95);
更新
看来我忽略了 Magick::Image.levelColors()
方法的 invert
参数。忽略上面的变通方法levelizeChannel
,使用下面的方法....
// +level-colors '#0D5A84','#19AAF9'
button.levelColors(Magick::Color("#0D5A84"), Magick::Color("#19AAF9"), true);