当前位置 : 主页 > 网络编程 > PHP >

php单文件上传、远程保存、加水印、缩放、html中图片替换.php

来源:互联网 收集:自由互联 发布时间:2021-06-28
单文件上传、远程保存、加水印、缩放、html中图片替换.php 0, 'info' = '参数不正确'));}/** * 远程多图保存,一行一个 * @param string $content 只包含图片地址和换行符的文本内容 * @param array
单文件上传、远程保存、加水印、缩放、html中图片替换.php
  0, 'info' => '参数不正确'));
}

/**
 * 远程多图保存,一行一个
 * @param  string $content 只包含图片地址和换行符的文本内容
 * @param  array  $config  配置
 * @return string          处理后的文本内容
 */
function urls($content, $config = array()){
	$separator = strpos($content, "\r\n") === false ? "\n" : "\r\n";
	$urls = explode($separator, $content);
	$result = "";
	if(!empty($urls)){
		foreach ($urls as $v) {
			$img = save($v, $config);
			if ($img['status'] == 1) {
				$result .= $img['info']. $separator;
			}
		}
	}
	return !empty($result) ? $result : $content;
}
/**
 * ubb解析多图替换
 * @param  string $content 文本内容
 * @param  array  $config  配置
 * @return string          替换后的文本内容
 */
function ubb($content, $config = array()) {
	// 匹配图片的src
	preg_match_all('#\[img\](.+?)\[/img\]#i', $content, $match);
	foreach ($match[1] as $imgurl) {
		if (strpos($imgurl, 'http') === false) {
			continue;
		}
		$img = save($imgurl, $config);
		if ($img['status'] == 1) {
			$content = str_replace('[img]'.$imgurl.'[/img]', $img['info'], $content);
		}
	}
	return $content;
}
/**
 * 替换html内容中图片地址
 * @param  string $content html内容
 * @param  array  $config  配置
 * @return string          替换后的html内容
 */
function html($content, $config = array()) {
	// 匹配图片的src
	preg_match_all('#
 
  ]*>#i', $content, $match);
	foreach ($match[1] as $imgurl) {
		if (strpos($imgurl, 'http') === false) {
			continue;
		}
		$img = save($imgurl, $config);
		if ($img['status'] == 1) {
			$content = str_replace($imgurl, $img['info'], $content);
		}
	}
	return $content;
}
/**
 * 单图片上传
 * @param  object $file   $_FILES['attach']
 * @param  array  $config 配置
 * @return string         图片地址
 */
function upload($file, $config = array()) {
	if ($file['error'] != 0) {
		/**
		 * 1; 超过了文件大小php.ini中即系统设定的大小。
		 * 2; 超过了文件大小MAX_FILE_SIZE 选项指定的值。
		 * 3; 文件只有部分被上传。
		 * 4; 没有文件被上传。
		 * 5; 上传文件大小为0。
		 */
		return array('status' => -$file['error'], 'info' => '图片上传失败');
	}
	$path = isset($config['path']) ? $config['path'] : date('Y/m/d');
	$path = rtrim(ltrim($path, '/'), '/');
	$path .= '/';
	$path = 'upload/' . $path;
	if (!file_exists($path)) {
		@mkdir($path, 0777, true); //原图路径
	}
	$tempf = $file['tmp_name'];
	$name = $file['name'];
	$file = $path . $name;
	if (file_exists($file)) {
		$info = pathinfo($file);
		$file = $path . getRandName($info['filename']) . '.' . strtolower($info['extension']);
	}
	$ext = getExt($file);
	if (!in_array($ext, array('jpg', 'png', 'gif', 'bmp'))) {
		return array('status' => 0, 'info' => '只能上传图片');
	}
	$true_ext = function_exists("finfo_open") ? getExtensionByMime($tempf) : getExtensionByCode($tempf);
	if ($true_ext != $ext) {
		return array('status' => 0, 'info' => '图片格式不正确');
	}
	@move_uploaded_file($tempf, $file);
	$tmp = false;
	if (isset($config['text']) || isset($config['water']) || isset($config['width']) || isset($config['height'])) {
		$tmp = imageHandle($file, $config);
	}
	if ($tmp != false && !empty($tmp) && $tmp != $file) {
		@unlink($file);
		$file = $tmp;
	}
	return array('status' => 1, 'info' => 'http://' . $_SERVER['HTTP_HOST'] . '/' . $file);
}
/**
 * 保存单张远程图片
 * @param  string $url    图片地址
 * @param  array  $config 配置
 * @return string         图片地址
 */
function save($url, $config = array()) {
	$url = trim(urldecode($url));
	$path = isset($config['path']) ? $config['path'] : date('Y/m/d');
	$path = rtrim(ltrim($path, '/'), '/');
	$path .= '/';
	$path = 'upload/' . $path;
	if (!file_exists($path)) {
		@mkdir($path, 0777, true); //原图路径
	}
	if (strpos($url, "://") === false) {
		return array('status' => 0, 'info' => '图片下载地址不正确');
	}
	$file = $path . pathinfo($url, PATHINFO_BASENAME);
	if (file_exists($file)) {
		$info = pathinfo($file);
		$file = $path . getRandName($info['filename']) . '.' . strtolower($info['extension']);
	}
	$file = httpDown($url, $file);
	if ($file === false) {
		return array('status' => 0, 'info' => '图片下载失败');
	}
	$ext = getExt($file);
	if (!in_array($ext, array('jpg', 'png', 'gif', 'bmp'))) {
		@unlink($file);
		return array('status' => 0, 'info' => '只能下载图片');
	}
	$true_ext = function_exists("finfo_open") ? getExtensionByMime($file) : getExtensionByCode($file);
	if ($true_ext != $ext) {
		@unlink($file);
		return array('status' => 0, 'info' => '图片格式不正确');
	}
	$tmp = false;
	if (isset($config['text']) || isset($config['water']) || isset($config['width']) || isset($config['height'])) {
		$tmp = imageHandle($file, $config);
	}
	if ($tmp != false && !empty($tmp) && $tmp != $file) {
		@unlink($file);
		$file = $tmp;
	}
	return array('status' => 1, 'info' => 'http://' . $_SERVER['HTTP_HOST'] . '/' . $file);
}
/**
 * 图片处理,包括水印和缩放,使用ThinkImage类实现
 * @param  string $file   图片地址
 * @param  array $config 配置
 * @return string         处理后的图片地址
 */
function imageHandle($file, $config = array()) {
	include_once 'ThinkImage/ThinkImage.php';
	$img = new ThinkImage(THINKIMAGE_GD, $file);
	if (isset($config['text'])) {
		$font = isset($config['font']) ? $config['font'] : 'mysh.ttf';
		$size = isset($config['size']) ? $config['size'] : '12';
		$color = isset($config['color']) ? $config['color'] : '#00000000';
		$locate = isset($config['locate']) ? $config['locate'] : THINKIMAGE_WATER_SOUTHEAST;
		$offset = isset($config['offset']) ? $config['offset'] : 0;
		$angel = isset($config['angel']) ? $config['angel'] : 0;
		$img->text($config['text'], $font, $size, $color, $locate, $offset, $angel);
	}
	if (isset($config['water'])) {
		if (!file_exists($config['water'])) {
			return false;
		}
		$locate = isset($config['locate']) ? $config['locate'] : THINKIMAGE_WATER_SOUTHEAST;
		$img->water($config['water'], $locate);
	}
	if (isset($config['width'])) {
		$width = $config['width'];
		$height = isset($config['height']) ? $config['height'] : $config['width'];
		$img->thumb($width, $height);
	}
	;
	if (isset($config['rename'])) {
		$info = pathinfo($file);
		$path = $info['dirname'];
		$file = $path . '/' . $config['rename'];
		$cover = isset($config['cover']) ? $config['cover'] : true;
		if (file_exists($file) && !$cover) {
			$file = $path . '/' . getRandName($config['rename']) . '.' . strtolower($info['extension']);
		}
	}
	$img->save($file);
	return $file;
}
/**
 * 获取随机文件名
 * @param  string $name 文件名前缀
 * @return string       md5后的文件名
 */
function getRandName($name='') {
	return md5(uniqid(rand()) . $name);
}
/**
 * 使用pathinfo获得扩展名
 * @param  string $file 图片文件名
 * @return string       扩展
 */
function getExt($file) {
	return strtolower(pathinfo($file, PATHINFO_EXTENSION));
}
/**
 * 读取mime获得扩展名
 * @param  string $file 图片文件名
 * @return string       扩展名
 */
function getExtensionByMime($file) {
	$finfo = finfo_open(FILEINFO_MIME_TYPE);
	$mimeTipe = finfo_file($finfo, $file);
	finfo_close($finfo);
	$mimes = array('image/jpeg' => 'jpg', 'image/gif' => 'gif', 'image/bmp' => 'bmp', 'image/png' => 'png');
	return isset($mimeTipe[$mimes]) ? strtolower($mimeTipe[$mimes]) : "";
}
function getExtensionByCode($file) {
	$tempfile = @fopen($file, "rb");
	$bin = fread($tempfile, 2); //只读2字节
	fclose($tempfile);
	$strInfo = @unpack("C2chars", $bin);
	$typeCode = intval($strInfo['chars1'] . $strInfo['chars2']);
	$fileType = '';
	switch ($typeCode) {
	// 6677:bmp 255216:jpg 7173:gif 13780:png 7790:exe 8297:rar 8075:zip tar:109121 7z:55122 gz 31139
	case '255216':
		$fileType = 'jpg';
		break;
	case '7173':
		$fileType = 'gif';
		break;
	case '13780':
		$fileType = 'png';
		break;
	case '6677':
		$fileType = 'bmp';
		break;
	default:
		$fileType = '';
	}
	return $fileType;
}
function httpDown($url, $file = "", $timeout = 60) {
	$file = empty($file) ? pathinfo($url, PATHINFO_BASENAME) : $file;
	$dir = pathinfo($file, PATHINFO_DIRNAME);
	!is_dir($dir) && @mkdir($dir, 0755, true);
	$url = str_replace(" ", "%20", $url);

	if (function_exists('curl_init')) {
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		$temp = curl_exec($ch);
		if (@file_put_contents($file, $temp) && !curl_error($ch)) {
			return $file;
		} else {
			return false;
		}
	} else {
		$opts = array(
			"http" => array(
				"method" => "GET",
				"header" => "",
				"timeout" => $timeout),
		);
		$context = stream_context_create($opts);
		if (@copy($url, $file, $context)) {
			//$http_response_header
			return $file;
		} else {
			return false;
		}
	}
}
 
上一篇:php随机文件名.txt
下一篇:reversal_num.php
网友评论