When using PHP programming, it is often necessary to add a watermark to the uploaded image to determine the copyright and source of the image. However, generally the location of the watermark is the lower right corner of the image. However, the color levels of different images are different. Sometimes the watermark of our picture is the same as the color level of the picture itself, which will cause the watermark to be inconspicuous. The following code can automatically identify the color level of the picture and add the watermark of the picture based on the color level difference. This can avoid the watermark and the color level of the picture. The same disadvantages.
- */
- 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);
-
- // Default watermark position adjustment
- $lt_w = 50;
- $lt_h = 50;
-
- if($x == 0){
- $w = MagickGetImageWidth($nmw);
- $h = MagickGetImageHeight($nmw);
-
- $x = $w;
- $y = $h ;
- }else{
- // Adjust according to specific circumstances
- $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's eachFileRecurse is still easy to use
- 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';
-
- // This is the coordinate 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);
Copy code
|