`
happysoul
  • 浏览: 403556 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

php+nginx实现动态获取缩略图或放大图并存储

 
阅读更多
<?php
/**
 * 图像裁剪
 * 需要系统安装 php-imagick 扩展
 */
//ini_set ( "memory_limit", "80M" );

// 请求地址比如  http://xxx.com/resize.php?site=www&width=300&height=200&mode=2&path=uploadfile/helloworld.png
// nginx重写规则  rewrite /s/(.*)/(\d+)x(\d+)-(\d)/(.*) /s/resize.php?site=$1&width=$2&height=$3&mode=$4&path=$5 last;
// 测试 http://localhost/resize.php?site=imgs&width=300&height=300&mode=1&path=22.jpg
// 图片放在resize.php同级的 ./imgs/ 目录下 访问后会创建 ./cache/ 文件夹
// 后期可以考虑

$path = trim ( $_GET ['path'] );
$mode = intval ( $_GET ['mode'] );
$site = trim ( $_GET ['site'] );
$width = intval ( $_GET ['width'] );
$height = intval ( $_GET ['height'] );


//访问文件是否存在
$now_dir = dirname ( __FILE__ );
//缩略图路径(***路径名cache可选修改***)
$zip_dir = "{$now_dir}/cache/{$site}/{$width}x{$height}-{$mode}/";
//原始图片存放目录
$img_dir = "{$now_dir}/{$site}/";
//原始图片文件完整路径
$big_file = "{$img_dir}{$path}";
//缩略图文件完整路径
$save_path = "{$zip_dir}{$path}";


//缩略图存在直接返回,不存在去检测原图
if (file_exists ( $save_path )){
	header ( 'Content-Type: image/jpeg' );
	//header ( 'Last-Modified: ' . gmdate ( 'D, d M Y H:i:s' ) . ' GMT' );
	//读取文件的修改时间
	header ('Modified:'.gmdate("D, d M Y H:i:s",filemtime($save_path)).' GMT');
	//输出图片流
	echo file_get_contents ( $save_path );
	return true;
}else if(! file_exists($big_file)){
	header ( 'HTTP/1.1 404 Not Found' );
	exit ();
}

//检测并创建保存目录
if (! file_exists ( $zip_dir )){
	//wpx_mkdir ( $zip_dir );
	createDir($zip_dir);
}



$target_width = $width;
$target_height = $height;

$new_width = $target_width;
$new_height = $target_height;
$image = new Imagick ( $big_file );
list ( $orig_width, $orig_height, $type, $attr ) = getimagesize ( $big_file );

if ($mode == "0") {
	//等比缩放图像
	$new_height = $orig_height * $new_width / $orig_width;
	if ($new_height > $target_height) {
		$new_width = $orig_width * $target_height / $orig_height;
		$new_height = $target_height;
	}
} else if ($mode == "2") {
	// 放大并裁剪图像
	$desired_aspect = $target_width / $target_height;
	$orig_aspect = $orig_width / $orig_height;

	if ($desired_aspect > $orig_aspect) {
		$trim = $orig_height - ($orig_width / $desired_aspect);
		$image->cropImage ( $orig_width, $orig_height - $trim, 0, $trim / 2 );
		error_log ( "HEIGHT TRIM $trim" );
	} else {
		$trim = $orig_width - ($orig_height * $desired_aspect);
		$image->cropImage ( $orig_width - $trim, $orig_height, $trim / 2, 0 );
	}
}
// 处理图片
$image->resizeImage ( $new_width, $new_height, imagick::FILTER_LANCZOS, 1 );
// 保存处理后的图片
$image->writeImage ( $save_path );
//标记返回头信息
header ( 'Content-Type: image/jpeg' );
header ( 'Last-Modified: ' . gmdate ( 'D, d M Y H:i:s' ) . ' GMT' );
echo file_get_contents ( $save_path );
return true;


// 循环生成目录(不使用)
function wpx_mkdir($dir, $mode = 0777) {
	if (is_dir ( $dir ) || @mkdir ( $dir, $mode ))
		return true;
	if (! wpx_mkdir ( dirname ( $dir ), $mode ))
		return false;
	return @mkdir ( $dir, $mode );
}

//生成目录
function createDir($path){ 
	if (!file_exists($path)){ 
		createDir(dirname($path)); 
		mkdir($path, 0777) or die('create dir fail, NND'); 
	} 
} 

?>



大搬运并修改,原地址
https://www.markdream.com/technologies/programs/how-to-build-a-resizing-image-server-with-imagick.shtml
分享到:
评论

相关推荐

    fastdfs+nginx 分布式存储图片,支持动态缩略图

    本主题将详细介绍如何利用FastDFS和Nginx搭建一个分布式图片存储系统,并实现动态生成缩略图的功能。 首先,我们来看FastDFS。FastDFS设计的主要目标是为互联网应用提供高效的文件存储服务,它将文件存储与文件访问...

    Docker+FastDFS+Nginx+Lua搭建图片服务器,并实现图片缩略图

    Docker+FastDFS+Nginx+Lua实现图片缩略图1、FastDFS安装1.1、镜像下载1.2、开启tracker容器1.3、开启storage容器1.4、测试2、FastDFS集成Nginx+lua2.1、依赖包下载2.2、安装软件基础包2.3、依赖安装2.4、配置Lua脚本...

    Nginx+Lua+GraphicsMagick图片缩略图

    Nginx+Lua+GraphicsMagick实现动态生成指定尺寸的图片

    keepalived+nginx实现双主热备

    keepalived+nginx实现双主热备

    SpringBoot+VUE+Redis+nginx 网上拍卖平台源码.zip

    SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+...

    windows下 php+nginx配置详解

    在Windows环境下搭建PHP和Nginx的组合是一个常见的任务,特别是在本地开发环境中。这个配置能够提供一个高效且灵活的Web服务器平台,支持动态内容处理,如PHP脚本。以下是对"windows下 php+nginx配置详解"的详细说明...

    ffmpeg+nginx+nginx-rtmp-module搭建个人直播平台

    ffmpeg+nginx+nginx-rtmp-module搭建个人直播平台。 使用说明(ffmpeg+nginx+rtmp-module已经整合,支持HTTP,具体配置查看conf/nginx.conf): 1.解压后,运行nginx_start.bat。(查看监控状态 ...

    大型电商项目实战1:Redis+Rest+Linux+Nginx+Spring+SpringMVC实现JAVA高并发秒杀系统

    大型电商项目实战1:Redis+Rest+Linux+Nginx+Spring+SpringMVC实现JAVA高并发秒杀系统,baidu链接,谢谢

    Keepalived+Nginx实现高可用Web负载均衡

    ### Keepalived+Nginx 实现高可用Web负载均衡 #### 场景需求 在现代互联网应用中,网站和应用程序需要处理大量的用户请求,并确保即使在服务器出现故障的情况下也能持续提供服务。为了满足这一需求,通常采用高可用...

    Tomcat+memcached+Nginx实现session共享

    【标题】:Tomcat+memcached+Nginx实现session共享 【内容详解】: Tomcat、Nginx和memcached的组合是常见的Web服务器架构,其中session共享是解决多服务器间用户状态同步的关键问题。本方案主要通过MSM(Memcached...

    Consul+upsync+Nginx动态配置负载均衡.pdf

    【Consul+upsync+Nginx动态配置负载均衡】 Consul+upsync+Nginx的组合提供了一种高效且灵活的动态负载均衡解决方案,它允许Nginx在无需重启的情况下实时更新其配置,以响应后端服务器的变化。这种技术特别适用于高...

    用FFmpeg+nginx+rtmp搭建环境实现推流.docx

    FFmpeg+nginx+rtmp搭建环境实现推流 FFmpeg、nginx、rtmp三者结合可以实现一个强大且高效的流媒体服务器,下面是它们的详细介绍和搭建过程。 FFmpeg FFmpeg是一款功能强大的开源命令行工具,能够处理视频和音频...

    linux+nginx+php+mysql环境配置指南.pdf

    "Linux+Nginx+PHP+MySQL环境配置指南" 本指南将指导您如何安装和配置 Linux+Nginx+PHP+MySQL 环境,以便于构建一个功能完善的 Web 服务器。 安装 Red Hat Linux 在开始安装 Linux 之前,需要选择语言和键盘布局。...

    Haproxy+Keepalived+Nginx+Lamp+Nfs实现高可用集群1

    【标题】:“Haproxy+Keepalived+Nginx+Lamp+Nfs实现高可用集群1” 【描述】:“在互联网服务中,高可用性是关键。本案例将通过Haproxy、Keepalived、Nginx、LAMP(Linux、Apache、MySQL、PHP)和NFS(网络文件系统...

    Keepalived + Nginx 实现高可用 Web 负载均衡配置文件

    Keepalived + Nginx 实现高可用 Web 负载均衡配置文件,具体详情参见博文:http://blog.csdn.net/l1028386804/article/details/72801492

    OBS+NGINX 实现rtmp直播推流.zip

    本教程将围绕"OBS+NGINX实现rtmp直播推流"这一主题展开,详细介绍如何利用开源软件Open Broadcasting Software (OBS) 和 Nginx 搭建一个rtmp直播推流系统,并使用VLC作为播放器。 首先,OBS是一款强大的免费开源...

    Spring Boot+Nginx实现负载均衡1

    Spring Boot+Nginx 实现负载均衡 在本文中,我们将介绍如何使用 Spring Boot 和 Nginx 实现负载均衡。负载均衡是指将 Incoming requests 分配到多个服务器,以提高系统的可扩展性和可靠性。使用 Spring Boot 和 ...

    keepalived+nginx实现双机主备

    Keepalived+nginx 实现双机主备 Keepalived 是一个基于 VRRP 协议的高可用性解决方案,可以与 Nginx 服务器集成,以实现双机主备的高可用性架构。在本文中,我们将详细介绍使用 Keepalived 和 Nginx 实现双机主备的...

Global site tag (gtag.js) - Google Analytics