首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

php 汉语文字水印乱码,求赐教

2013-01-02 
php 中文文字水印乱码,求赐教头:代码:结果:详细代码:!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Trans

php 中文文字水印乱码,求赐教

头:
php 汉语文字水印乱码,求赐教
代码:
php 汉语文字水印乱码,求赐教
结果:
php 汉语文字水印乱码,求赐教
详细代码:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Default Examples</title>
</head>
<body>
<?php

/* 
* 功能:PHP图片水印 (水印支持图片或文字) 
* 参数: 
* $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式; 
* $waterPos 水印位置,有10种状态,0为随机位置; 
* 1为顶端居左,2为顶端居中,3为顶端居右; 
* 4为中部居左,5为中部居中,6为中部居右; 
* 7为底端居左,8为底端居中,9为底端居右; 
* $waterImage 图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式; 
* $waterText 文字水印,即把文字作为为水印,支持ASCII码,不支持中文; 
* $textFont 文字大小,值为1、2、3、4或5,默认为5; 
* $textColor 文字颜色,值为十六进制颜色值,默认为#FF0000(红色); 

* 注意:Support GD 2.0,Support FreeType、GIF Read、GIF Create、JPG 、PNG 
* $waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。 
* 当$waterImage有效时,参数$waterString、$stringFont、$stringColor均不生效。 
* 加水印后的图片的文件名和 $groundImage 一样。 
* 作者:longware @ 2004-11-3 14:15:13 
*/
function imageWaterMark($groundImage, $waterPos = 0, $waterImage = "", $waterText = "", $textFont = 5, $textColor = "#FF0000") {
 $isWaterImage = FALSE;
 $formatMsg = "暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。";
 
 //读取水印文件 
 if (! empty ( $waterImage ) && file_exists ( $waterImage )) {
  $isWaterImage = false;
  $water_info = getimagesize ( $waterImage );
  $water_w = $water_info [0]; //取得水印图片的宽 
  $water_h = $water_info [1]; //取得水印图片的高 
  

  switch ($water_info [2]) //取得水印图片的格式 
{
   case 1 :
    $water_im = imagecreatefromgif ( $waterImage );
    break;
   case 2 :
    $water_im = imagecreatefromjpeg ( $waterImage );
    break;
   case 3 :
    $water_im = imagecreatefrompng ( $waterImage );
    break;
   default :
    die ( $formatMsg );
  }
 }
 
 //读取背景图片 
 if (! empty ( $groundImage ) && file_exists ( $groundImage )) {
  $ground_info = getimagesize ( $groundImage );
  $ground_w = $ground_info [0]; //取得背景图片的宽 
  $ground_h = $ground_info [1]; //取得背景图片的高 
  

  switch ($ground_info [2]) //取得背景图片的格式 
{
   case 1 :
    $ground_im = imagecreatefromgif ( $groundImage );


    break;
   case 2 :
    $ground_im = imagecreatefromjpeg ( $groundImage );
    break;
   case 3 :
    $ground_im = imagecreatefrompng ( $groundImage );
    break;
   default :
    die ( $formatMsg );
  }
 } else {
  die ( "需要加水印的图片不存在!" );
 }
 
 //水印位置 
 if ($isWaterImage) //图片水印 
{
  $w = $water_w;
  $h = $water_h;
  $label = "图片的";
 } else //文字水印 
{
  $temp = imagettfbbox ( ceil ( $textFont * 5 ), 0, "./cour.ttf", $waterText ); //取得使用 TrueType 字体的文本的范围 
  $w = $temp [2] - $temp [6];
  $h = $temp [3] - $temp [7];
  //  $w = $temp [4] - $temp [6];
  //  $h = $temp [1] - $temp [7];
  unset ( $temp );
  $label = "文字区域";
 }
 if (($ground_w < $w) || ($ground_h < $h)) {
  echo "需要加水印的图片的长度或宽度比水印" . $label . "还小,无法生成水印!";
  return;
 }
 switch ($waterPos) {
  case 0 : //随机 
   $posX = rand ( 0, ($ground_w - $w) );
   $posY = rand ( 0, ($ground_h - $h) );
   break;
  case 1 : //1为顶端居左 
   $posX = 0;
   $posY = 0;
   break;
  case 2 : //2为顶端居中 
   $posX = ($ground_w - $w) / 2;
   $posY = 0;
   break;
  case 3 : //3为顶端居右 
   $posX = $ground_w - $w;
   $posY = 0;
   break;
  case 4 : //4为中部居左 
   $posX = 0;
   $posY = ($ground_h - $h) / 2;
   break;
  case 5 : //5为中部居中 
   $posX = ($ground_w - $w) / 2;
   $posY = ($ground_h - $h) / 2;
   break;
  case 6 : //6为中部居右 
   $posX = $ground_w - $w;
   $posY = ($ground_h - $h) / 2;
   break;
  case 7 : //7为底端居左 
   $posX = 0;
   $posY = $ground_h - $h;
   break;
  case 8 : //8为底端居中 
   $posX = ($ground_w - $w) / 2;
   $posY = $ground_h - $h;
   break;
  case 9 : //9为底端居右 
   $posX = $ground_w - $w;
   $posY = $ground_h - $h;
   break;


  default : //随机 
   $posX = rand ( 0, ($ground_w - $w) );
   $posY = rand ( 0, ($ground_h - $h) );
   break;
 }
 
 //设定图像的混色模式 
 imagealphablending ( $ground_im, true );
 
 if ($isWaterImage) //图片水印 
{
  imagecopy ( $ground_im, $water_im, $posX, $posY, 0, 0, $water_w, $water_h ); //拷贝水印到目标文件 
 } else //文字水印 
{
  if (! empty ( $textColor ) && (strlen ( $textColor ) == 7)) { //颜色代码#XXXXXX格式所以不能少于7位
   $R = hexdec ( substr ( $textColor, 1, 2 ) );
   $G = hexdec ( substr ( $textColor, 3, 2 ) );
   $B = hexdec ( substr ( $textColor, 5 ) );
  } else {
   die ( "水印文字颜色格式不正确!" );
  }
  //imagestring ( $ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate ( $ground_im, $R, $G, $B ) );
  //imagestring($image, $font, $x, $y, $string, $color)
  //imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text)
  

  imagettftext ( $ground_im, ceil ( $textFont * 5 ), 0, $ground_w - $w, $ground_h - $h, imagecolorallocate ( $ground_im, $R, $G, $B ), "./cour.ttf", $waterText );
 
  //iconv("UTF-8","GB2312",$waterText)
 }
 
 //生成水印后的图片 
 @unlink ( $groundImage );
 switch ($ground_info [2]) //取得背景图片的格式 
{
  case 1 :
   imagegif ( $ground_im, $groundImage );
   break;
  case 2 :
   imagejpeg ( $ground_im, $groundImage );
   break;
  case 3 :
   imagepng ( $ground_im, $groundImage );
   break;
  default :
   die ( $errorMsg );
 }
 
 //释放内存 
 if (isset ( $water_info ))
  unset ( $water_info );
 if (isset ( $water_im ))
  imagedestroy ( $water_im );
 unset ( $ground_info );
 imagedestroy ( $ground_im );
}
//————————————————————————————— 
$id = $_REQUEST ['id'];
$num = count ( $_FILES ['userfile'] ['name'] );
print_r ( $_FILES ['userfile'] );
print_r ( $_FILES ['userfile'] ['name'] );

echo $num;
echo "<bR>";
if (isset ( $id )) {
 for($i = 0; $i < $id; $i ++) {
  
  if (isset ( $_FILES ) && ! empty ( $_FILES ['userfile'] ) && $_FILES ['userfile'] ['size'] > 0) {
   $uploadfile = "./" . time () . "_" . $_FILES ['userfile'] [name] [$i];


   echo "<br>";
   echo $uploadfile;
   if (copy ( $_FILES ['userfile'] ['tmp_name'] [$i], $uploadfile )) {
    echo "OK<br>";
    
    //文字水印 
    //imageWaterMark ( $uploadfile, 5, "", mb_convert_encoding("图片来源:","utf-8"), 3, "#dd1786" );
    imageWaterMark ( $uploadfile, 5, "", "图片来源:", 3, "#dd1786" );
    //mb_convert_encoding("图片来源:CAS改装车展","UTF-8") 
    //iconv("GB2312","UTF-8","图片来源:CAS改装车展")
    //图片水印 
    //$waterImage = "11.jpg"; //水印图片路径 
    //imageWaterMark ( $uploadfile, 9, $waterImage );
    

    echo "<img src="" . $uploadfile . "" border="0">";
   } else {
    echo "Fail<br>";
   }
  }
 }
}
// Returns true if $string is valid UTF-8 and false otherwise.
function is_utf8($string) {
 
 // From http://w3.org/International/questions/qa-forms-utf-8.html
 return preg_match ( '%^(?:
          [\x09\x0A\x0D\x20-\x7E]            # ASCII
        | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
        |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
        | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
        |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
        |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
        | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
        |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
    )*$%xs', $string );

} // function is_utf8
?>

<form enctype="multipart/form-data" method="POST"> 
<?php
//echo is_utf8 ( "测试。" );
for($a = 0; $a < $id; $a ++) {
 echo "文件: <input name="userfile[]" type="file"><br>";

}
?> 
<input type="submit" value="上传"></form>
</body>
</html>



转码或者不转码水印出来都是乱码,求高手赐教

[解决办法]
1。确认哈哈 你服务器上有声称水印的字体 
2.确认这个字体是支持中文大的
3.确认你文件编码和你中文的编码是一致的
[解决办法]
字体问题,
换个支持中文的字体就可以了。
比如说 simfang.ttf

热点排行