function add_wm( $nmw_water , $src_file , $output_file , $x , $y ) { |
if ( file_exists ( $output_file )) |
return ; |
$w1 = MagickGetImageWidth( $nmw_water ); |
$h1 = MagickGetImageHeight( $nmw_water ); |
$nmw =NewMagickWand(); |
MagickReadImage( $nmw , $src_file ); |
// 默认的加水印位置调整 |
$lt_w = 50; |
$lt_h = 50; |
if ( $x == 0){ |
$w = MagickGetImageWidth( $nmw ); |
$h = MagickGetImageHeight( $nmw ); |
$x = $w ; |
$y = $h ; |
} else { |
// 根据具体情况调整 |
$lt_w = 30; |
$lt_h = 40; |
} |
MagickCompositeImage( $nmw , $nmw_water , MW_OverCompositeOp, $x - $w1 - $lt_w , $y - $h1 - $lt_h ); |
MagickWriteImage( $nmw , $output_file ); |
DestroyMagickWand( $nmw ); |
} |
// 还是groovy的eachFileRecurse好用啊 |
function add_wm_recurse( $nmw_water , $to_dir , $output_dir , $arr ) { |
$dp = dir( $to_dir ); |
while ( $file = $dp ->read()){ |
if ( $file != '.' && $file != '..' ){ |
if ( is_dir ( $to_dir . '/' . $file )){ |
mkdir ( $output_dir . '/' . $file ); |
add_wm_recurse( $nmw_water , $to_dir . '/' . $file , $output_dir . '/' . $file , $arr ); |
} else { |
if (! array_key_exists ( $to_dir . '/' . $file , $arr )){ |
continue ; |
} |
$sub_arr = $arr [ $to_dir . '/' . $file ]; |
if ( $sub_arr ){ |
$x = intval ( $sub_arr [0]); |
$y = intval ( $sub_arr [1]); |
add_wm( $nmw_water , $to_dir . '/' . $file , $output_dir . '/' . $file , $x , $y ); |
} |
} |
} |
} |
$dp ->close(); |
} |
$to_dir = './resized' ; |
$output_dir = './output' ; |
// 这个是我用java的ImageIO遍历图片像素获取的符合裤子颜色的区域的坐标array(posX, posY) |
$arr = array ( |
array (50, 50) |
); |
$water = './water.png' ; |
$nmw_water =NewMagickWand(); |
MagickReadImage( $nmw_water , $water ); |
add_wm_recurse( $nmw_water , $to_dir , $output_dir , $arr ); |
DestroyMagickWand( $nmw_water ); |