//Check if the file exists if (!file_exists($file)) { throw new Exception("Error: File at path {$file} does not exist."); } //Check to make sure the file is an image of the appropriate extension. if (!(preg_match('/.png/i', $file) || preg_match('/.jpg/i', $file) || preg_match('/.jpeg/i', $file))) { throw new Exception("Error: Invalid file type for {$file}. Must be jpeg or png"); } // Main logic $f_name = basename($file); echo "Processing " . $f_name . "....\n\n"; $path_info = pathinfo($file); $image = $path_info['extension'] == 'png' ? imagecreatefrompng($file) : imagecreatefromjpeg($file); $hex_array = get_color_values($image); $top_five = get_dominant_five($hex_array); $json_obj = get_img_info($f_name, $top_five); echo $json_obj . "\n\n"; } // Returns an array representing all of the pixels and their respective #hex values. function get_color_values($image) { $image_x = imagesx($image); $image_y = imagesy($image); $hex_array = array(); for ($x = 0; $x < $image_x; $x++) { for ($y = 0; $y < $image_y; $y++) { $color = imagecolorat($image, $x, $y); $red = $color >> 16 & 0xff; $green = $color >> 8 & 0xff; $blue = $color & 0xff; $hex = rgb_to_hex(array($red, $green, $blue));
function resize_img() { if (!($image = $_POST["img"])) { $result['result_code'] = 101; $result['result_des'] = "图片不存在"; } else { $real_img = $_SERVER['DOCUMENT_ROOT'] . $image; $info = get_img_info($real_img); if (!$info) { $result['result_code'] = 102; $result['result_des'] = $image; } else { $max_width = 440; if ($info['type'] == 'jpg' || $info['type'] == 'jpeg') { $im = imagecreatefromjpeg($real_img); } if ($info['type'] == 'gif') { $im = imagecreatefromgif($real_img); } if ($info['type'] == 'png') { $im = imagecreatefrompng($real_img); } if ($info['width'] <= $max_width) { $rate = 1; } else { $rate = $info['width'] / $max_width; if ($info['width'] > $info['height']) { $max_height = intval($info['height'] / ($info['width'] / $max_width)); } else { $max_width = intval($info['width'] / ($info['height'] / $max_height)); } } $x = $_POST["x"]; $y = $_POST["y"]; $w = $_POST["w"]; $h = $_POST["h"]; $width = $srcWidth = $info['width']; $height = $srcHeight = $info['height']; $type = empty($type) ? $info['type'] : $type; $type = strtolower($type); unset($info); //创建缩略图 if ($type != 'gif' && function_exists('imagecreatetruecolor')) { $thumbImg = imagecreatetruecolor($width, $height); } else { $thumbImg = imagecreate($width, $height); } // 复制图片 if (function_exists("imagecopyresampled")) { imagecopyresampled($thumbImg, $im, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight); } else { imagecopyresized($thumbImg, $im, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight); } if ('gif' == $type || 'png' == $type) { $background_color = imagecolorallocate($thumbImg, 0, 255, 0); imagecolortransparent($thumbImg, $background_color); } // 对jpeg图形设置隔行扫描 if ('jpg' == $type || 'jpeg' == $type) { imageinterlace($thumbImg, 1); } if (!is_dir(get_save_path() . "emp_pic/")) { mkdir(get_save_path() . "emp_pic/", 0777, true); chmod(get_save_path() . "emp_pic/", 0777); } // 生成图片 $imageFun = 'image' . ($type == 'jpg' ? 'jpeg' : $type); $id = $_REQUEST['id']; $thumbname = get_save_path() . "emp_pic/" . $id . "." . $type; $imageFun($thumbImg, $thumbname, 100); $thumbImg_120 = imagecreatetruecolor(120, 120); imagecopyresampled($thumbImg_120, $thumbImg, 0, 0, intval($x * $rate), intval($y * $rate), intval(120 * 1), intval(120 * 1), intval($w * $rate), intval($h * $rate)); $imageFun($thumbImg_120, $thumbname, 100); imagedestroy($thumbImg); imagedestroy($im); $result['result_code'] = 1; $result['result_des'] = str_replace(get_save_path(), "", $thumbname); } } echo json_encode($result); }
/** * 获取各种规格的图片,如果有同种规格的图片直接返回,没有将生成 * @param string $img // 要缩放的图片 * @param int $width // 是要缩放到的宽 * @param int $height // 要缩放到的高 * @param string $type // 缩放类型 thumb是缩放 merge是融图 cut是修剪,fixed是固定大小 * @param string $default // 如果图片为空时的默认图片 * @return string $newName // 缩放后的文件名 */ function get_img($id, $width = 100, $height = 100, $type = 'thumb', $default = '') { $info = get_img_info($id); if (empty($info)) { return $default; } $img_path = 'Public' . ltrim($info['savepath'], '.') . $info['savename']; if (!file_exists($img_path)) { return $default; } $type = strtolower($type); $type_arr = array('thumb', 'merge', 'cut', 'fixed'); if (!in_array($type, $type_arr)) { $type = 'thumb'; } if (empty($width)) { $width = 100; } if (empty($height)) { $height = 100; } $dirname = dirname($img_path); $filename = array_shift(explode('.', $info['savename'])); $name = $filename . '_' . $type . '_' . $width . $height . '.' . $info['ext']; $save = $dirname . '/' . $name; if (file_exists($save)) { return __ROOT__ . '/' . $save; } $image = new \Think\Image(); $image->open($img_path); switch ($type) { case 'merge': // 生成一个缩放后填充的缩略图并保存 $image->thumb($width, $height, \Think\Image::IMAGE_THUMB_FILLED)->save($save); break; case 'cut': // 生成一个缩放后填充的缩略图并保存 $image->thumb($width, $height, \Think\Image::IMAGE_THUMB_CENTER)->save($save); break; case 'fixed': // 生成一个缩放后填充的缩略图并保存 $image->thumb($width, $height, \Think\Image::IMAGE_THUMB_FIXED)->save($save); break; default: // 单纯的缩放 $image->thumb($width, $height)->save($save); break; } return __ROOT__ . '/' . $save; }