首页 > php图像处理 > php生成缩略图,文本转换成图形

php生成缩略图,文本转换成图形

这是一款老外的经典的php生成缩略图类函数,文件灵活实用,可以生成任何风格的图片,并且可以把文本转换成图形.

php生成缩略图,文本转换成图形实例代码如下:

<?php
/*copyright   : smart-info limited. all right reserved.
 author      : jacky cheung 
 version     : 1.1 
 create date : 24 september 2008 
 last modify : 15 march 2009 
*/
class gd {
    var $font_face = "";
    var $text = "";
    var $size = 12;
    var $color = "#000000";
    var $angle = 0;
    var $width = 0;
    var $height = 0;
    var $line_height = 0;
    var $type = "png";
    var $chmod = 0777;
    var $bg_color = "#ffffff";
    var $quality = 95;
    var $antialias = true;
    var $x = 0;
    var $y = 0;
    /*___| convert text to image |___*/
    public function text2image($font_face = "", $text = "", $attributes = false, $width = 0, $all = false) {
        $this->font_face = $font_face;
        $this->text = $text;
        $this->width = $width;
        $this->size = 12;
        $this->color = "#000000";
        $this->angle = 0;
        $this->line_height = 0;
        $this->setprop($attributes);
        if ($this->width == 0) {
            return $this->convert_text2image($this->text, $this->check_text_width($this->text));
        } else {
            // word wrap
            if ($all === false) {
                $text = split(" ", $this->text);
                $text = $this->word_wrap($this->text, $this->width, "<br>");
                $text = split("<br>", $text);
            } else if ($all === true) {
                $temp = array();
                for ($i = 0; $i < strlen($this->text); $i++) {
                    array_push($temp, mb_substr($this->text, $i, 1, "utf-8"));
                }
                $text = array();
                $count_width = 0;
                $i = 0;
                foreach ($temp as $k => $t) {
                    $prop = $this->check_text_width($t);
                    if ($count_width + floatval($prop["width"]) < $this->width) {
                        $text[$i] = $text[$i] . $t;
                        $count_width+= floatval($prop["width"]);
                    } else {
                        $count_width = 0;
                        $i++;
                        $text[$i] = "";
                    }
                }
            }
            $img = array();
            foreach ($text as $k => $t) {
                $img[$k] = $this->convert_text2image($t, $this->check_text_width($t));
            }
            $w = 0;
            $h = 0;
            foreach ($img as $k => $v) {
                $w = (imagesx($img[$k]) > $w) ? imagesx($img[$k]) : $w;
                if ($this->line_height == 0) $h+= imagesy($img[$k]);
                else $h+= ($k < count($img) - 1) ? $this->line_height : imagesy($img[$k]);
            }
            $base_img = $this->createtransparent($w, $h);
            $locy = 0;
            foreach ($img as $k => $v) {
                if ($k > 0) {
                    $locy = ($this->line_height == 0) ? $locy + imagesy($img[$k]) : $locy + $this->line_height;
                }
                $base_img = $this->attachgdimage($img[$k], $base_img, array(
                    "x" => 0,
                    "y" => $locy
                ));
            }
            return $base_img;
        }
    }
    private function word_wrap($str, $width, $break) {
        $formatted = '';
        $position = - 1;
        $prev_position = 0;
        $last_line = - 1;
        /// looping the string stop at each space
        while ($position = mb_stripos($str, " ", ++$position, 'utf-8')) {
            if ($position > $last_line + $width + 1) {
                $formatted.= mb_substr($str, $last_line + 1, $prev_position - $last_line - 1, 'utf-8') . $break;
                $last_line = $prev_position;
            }
            $prev_position = $position;
        }
        /// adding last line without the break
        $formatted.= mb_substr($str, $last_line + 1, mb_strlen($str) , 'utf-8');
        return $formatted;
    }
    public function convert_text2image($text, $prop) {
        $im = imagecreatetruecolor($prop["width"], $prop["height"]);
        $rgb = $this->getrgb($this->color);
        $color = imagecolorallocate($im, $rgb["red"], $rgb["green"], $rgb["blue"]);
        $img = $this->createtransparent($prop["width"], $prop["height"]);
        imagettftext($img, $this->size, $this->angle, 0, $prop["height"] - abs($prop["top"]) , $color, $this->font_face, $text);
        return $img;
    }
    public function check_text_width($text) {
        $prop = array();
        $bbox = imagettfbbox($this->size, $this->angle, $this->font_face, $text);
        $prop["left"] = $bbox[0];
        $prop["right"] = $bbox[2];
        $prop["top"] = $bbox[1];
        $prop["bottom"] = $bbox[7];
        $padding = 2;
        $prop["width"] = abs($prop["left"]) + abs($prop["right"]) + $padding;
        $prop["height"] = abs($prop["top"]) + abs($prop["bottom"]) + $padding;
        return $prop;
    }
    /*___| save to image file |___*/
    public function save($gdimage, $filename, $attributes = false) {
        $this->type = "png";
        $this->chmod = 0777;
        $this->bg_color = "#ffffff";
        $this->quality = 95;
        $this->antialias = true;
        $this->setprop($attributes);
        // process
        switch (strtolower($this->type)) {
            case "jpeg":
            case "jpg":
                $gdimage = $this->createbackground($gdimage, imagesx($gdimage) , imagesy($gdimage));
                imagejpeg($gdimage, $filename, $this->quality);
                break;
            case "gif":
                $gdimage = $this->createbackground($gdimage, imagesx($gdimage) , imagesy($gdimage));
                imagegif($gdimage, $filename);
                break;
            case "png":
            default:
                imagepng($gdimage, $filename);
                break;
        }
        chmod($filename, $this->chmod);
    }
    /*___| create gd background image |___*/
    public function createbackground($gdimage, $width, $height) {
        $img = imagecreatetruecolor($width, $height);
        $rgb = $this->getrgb($this->bg_color);
        $color = imagecolorallocate($img, $rgb["red"], $rgb["green"], $rgb["blue"]);
        imagefill($img, 0, 0, $color);
        imagecopyresampled($img, $gdimage, 0, 0, 0, 0, $width, $height, $width, $height);
        return $img;
    }
    /*___| create gd transparent image |___*/
    public function createtransparent($width, $height) {
        $img = imagecreatetruecolor($width, $height);
        imagealphablending($img, false);
        imagesavealpha($img, true);
        $transparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
        imagefilledrectangle($img, 0, 0, $width, $height, $transparent);
        imagecopyresampled($img, $img, 0, 0, 0, 0, $width, $height, $width, $height);
        return $img;
    }
    /*___| load image |___*/
    public function createimagefrom($filename, $alpha = true) {
        if (function_exists("exif_imagetype")) {
            if (exif_imagetype($filename) == imagetype_jpeg) {
                return $this->createfromjpeg($filename);
            } else if (exif_imagetype($filename) == imagetype_gif) {
                return $this->createfromgif($filename);
            } else if (exif_imagetype($filename) == imagetype_png) {
                return $this->createfrompng($filename, $alpha);
            }
        } else {
            if (strstr(strtoupper($filename) , ".jpg") || strstr(strtoupper($filename) , ".jpeg")) {
                return $this->createfromjpeg($filename);
            } else if (strstr(strtoupper($filename) , ".gif")) {
                return $this->createfromgif($filename);
            } else if (strstr(strtoupper($filename) , ".png")) {
                return $this->createfrompng($filename, $alpha);
            }
        }
        return false;
    }
    private function createfromjpeg($filename) {
        return imagecreatefromjpeg($filename);
    }
    private function createfromgif($filename) {
        return imagecreatefromgif($filename);
    }
    private function createfrompng($filename, $alpha = true) {
        if ($alpha) {
            list($width, $height) = getimagesize($filename);
            $png_img = imagecreatefrompng($filename);
            $img = imagecreatetruecolor($width, $height);
            imagealphablending($img, false);
            imagesavealpha($img, true);
            imagecopyresampled($img, $png_img, 0, 0, 0, 0, $width, $height, $width, $height);
        } else {
            $img = imagecreatefrompng($filename);
        }
        return $img;
    }
    /*___| attach background image |___*/
    public function attachbackgroundimage($gdimage, $filename, $attributes = false) {
        $this->x = 0;
        $this->y = 0;
        $this->setprop($attributes);
        $img = $this->createimagefrom($filename);
        imagecopyresampled($img, $gdimage, $this->x, $this->y, 0, 0, imagesx($gdimage) , imagesy($gdimage) , imagesx($gdimage) , imagesy($gdimage));
        return $img;
    }
    /*___| attach image |___*/
    public function attachimage($source, $target, $filename, $image_attributes = false, $attributes = false) {
        $source_img = $this->createimagefrom($source);
        $target_img = $this->attachbackgroundimage($source_img, $target, $attributes);
        $this->save($target_img, $filename, $image_attributes);
    }
    /*___| attach gd image resource |___*/
    public function attachgdimage($gd_source, $gd_target, $attributes = false) {
        $this->x = 0;
        $this->y = 0;
        $this->width = 0;
        $this->height = 0;
        $this->setprop($attributes);
        imagealphablending($gd_target, true);
        imagealphablending($gd_source, true);
        imagecopy($gd_target, $gd_source, $this->x, $this->y, 0, 0, imagesx($gd_source) , imagesy($gd_source));
        return $gd_target;
    }
    /*___| get rgb color |___*/
    public function getrgb($hex) {
        $rgb["red"] = hexdec(substr($hex, 1, 2));
        $rgb["green"] = hexdec(substr($hex, 3, 2));
        $rgb["blue"] = hexdec(substr($hex, 5, 2));
        return $rgb;
    }
    /*___| set properties |___*/
    private function setprop($attributes = false) {
        if ($attributes) {
            foreach ($attributes as $key => $value) {
                $k = strtoupper($key);
                $this->$k = $value;
            }
        }
    }
}
//开源代码phprm.com
//调用 方法代码如下:
$imgresize = new imagetransform();
$imgresize->sourcefile = $source . $file;
$imgresize->targetfile = $destination . $file;
$imgresize->chmodvalue = 0777;
$imgresize->resizetowidth = $tw;
$imgresize->resizetoheight = $th;
$imgresize->jpegoutputquality = 100;
$imgresize->resizeifsmaller = false;
$imgresize->resize();


教程网址:http://www.phprm.com/tuxiang/fs4473.html

欢迎收藏∩_∩但请保留本文链接。

标签:php生成缩略图 php文本转换

相关文章

发表留言