0

我的应用程序用户能够上传照片。有时,我希望他们隐藏图片的一些信息,例如车辆的牌照或发票的个人地址。

为了满足这一需求,我计划对图像的一部分进行像素化。给定要隐藏的区域的坐标和区域的大小,如何以这种方式对图像进行像素化。

我发现了如何像素化(通过缩小和放大图像),但我怎样才能只定位图像的一个区域?

该区域由两对坐标 (x1, y1, x2, y2) 或一对坐标和尺寸 (x, y, width, height) 指定。

4

2 回答 2

1

I am at work at the moment so can not test any code. I would see if you could work with -region or else use a mask. Copy the image and pixelate the whole image create a mask of the area required, cut a hole in the original image with the mask and overlay it over the pixelated image.

Example of masking an image

You could modify this code ( quite old and could probably be improved on ):

// Get the image size to creat the mask 
// This can be done within Imagemagick but as we are using php this is simple. 
$size = getimagesize("$input14"); 

// Create a mask with a round hole  
$cmd = " -size {$size[0]}x{$size[1]} xc:none -fill black ". 
" -draw \"circle 120,220 120,140\" ";  
exec("convert $cmd mask.png");  

// Cut out the hole in the top image  
$cmd = " -compose Dst_Out mask.png -gravity south $input14 -matte ";  
exec("composite $cmd result_dst_out1.png");  

// Composite the top image over the bottom image  
$cmd = " $input20 result_dst_out1.png -geometry +60-20 -composite ";  
exec("convert $cmd output_temp.jpg");  

// Crop excess from the image where the bottom image is larger than the top 
$cmd = " output_temp.jpg -crop 400x280+60+0 "; 
exec("convert $cmd composite_sunflower_hard.jpg ");  

// Delete tempory images 
unlink("mask.png");  
unlink("result_dst_out1.png");  
unlink("output_temp.jpg");  
于 2012-05-24T07:09:53.027 回答
1

谢谢你的回答,邦佐。

convert我找到了一种使用 ImageMagick命令实现我想要的方法。这是一个 3 个步骤的过程:

  1. 我创建了整个源图像的像素化版本。
  2. 然后我使用填充黑色(带有gamma 0)的原始图像(以保持相同的大小)构建一个蒙版,然后在我想要不可读区域的地方绘制空白矩形。
  3. 然后我在合成操作中合并三个图像(原始图像、像素化图像和蒙版)。

这是一个具有 2 个区域(a 和 b)像素化的示例。

转换 original.png -scale 10% -scale 1000% pixelated.png
转换 original.png -gamma 0 -fill white -draw "rectangle X1a, Y1a, X2a, Y2a" -draw "rectangle X1b, Y1b, X2b, Y2b" mask.png
转换 original.png pixelated.png mask.png -composite result.png

它就像一个魅力。现在我将使用 RMagick 来完成。

于 2012-05-24T08:06:47.917 回答