PHP生成任意尺寸并居中裁剪缩略图的函数

  在项目中经常需要对图片进行各种处理,比如生成缩略图,并且生成的缩略图还要保持原有图片的宽高比例不变形,下面就分享一个非常好用的PHP生成缩略图函数,可以手动输入自定义尺寸并居中裁剪保持图片比例不变形,代码如下:

<?php
// 应用公共文件
/**
 * 居中裁剪图片
 * @param string $source [原图路径]
 * @param int $width [设置宽度]
 * @param int $height [设置高度]
 * @param string $target [目标路径]
 * @return bool [裁剪结果]
 */

function image_center_crop($source, $width, $height, $target)
{
	if (!file_exists($source)) return false;
	/* 根据类型载入图像 */
	switch (exif_imagetype($source)) {
		case IMAGETYPE_JPEG:
			$image = imagecreatefromjpeg($source);
			break;
		case IMAGETYPE_PNG:
			$image = imagecreatefrompng($source);
			break;
		case IMAGETYPE_GIF:
			$image = imagecreatefromgif($source);
			break;
	}
	if (!isset($image)) return false;
	/* 获取图像尺寸信息 */
	$target_w = $width;
	$target_h = $height;
	$source_w = imagesx($image);
	$source_h = imagesy($image);
	/* 计算裁剪宽度和高度 */
	$judge = (($source_w / $source_h) > ($target_w / $target_h));
	$resize_w = $judge ? ($source_w * $target_h) / $source_h : $target_w;
	$resize_h = !$judge ? ($source_h * $target_w) / $source_w : $target_h;
	$start_x = $judge ? ($resize_w - $target_w) / 2 : 0;
	$start_y = !$judge ? ($resize_h - $target_h) / 2 : 0;
	/* 绘制居中缩放图像 */
	$resize_img = imagecreatetruecolor($resize_w, $resize_h);
	imagecopyresampled($resize_img, $image, 0, 0, 0, 0, $resize_w, $resize_h, $source_w, $source_h);
	$target_img = imagecreatetruecolor($target_w, $target_h);
	imagecopy($target_img, $resize_img, 0, 0, $start_x, $start_y, $resize_w, $resize_h);
	/* 将图片保存至文件 */
	if (!file_exists(dirname($target))) mkdir(dirname($target), 0777, true);
	switch (exif_imagetype($source)) {
		case IMAGETYPE_JPEG:
			imagejpeg($target_img, $target);
			break;
		case IMAGETYPE_PNG:
			imagepng($target_img, $target);
			break;
		case IMAGETYPE_GIF:
			imagegif($target_img, $target);
			break;
	}
	return boolval(file_exists($target));
}
<?php
// 使用方法
if (image_center_crop($source,220,150,$target)) {
	echo "<img src='$target'>";
}

本站原创内容,转载请注明来源:https://www.liutonghui.com/186.html

PHP文字水印,缩略图,图片水印实现类与用法示例
上一篇 2020-08-22
实现自动高度的几种 CSS 方法
下一篇 2020-12-11

评论列表(1条)

发表评论

captcha

相关推荐

  • PHP使用内置函数处理JSON数据

      JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,通常用于在前端和后端之间传递数据。在PHP中,你可以使用内置的函数来处理JSON数据,实现数据的编码和解码。   以下是PHP中JSON的一些常见应用:   1. 编码(PHP对象转为JSON字符串)   使用 json_encode() 函数可以将PHP对象转换为JSON格式的字符串: $data = array( 'name' =......

    2013-10-09
    16780
  • PHP生成HTML静态页原理

      在PHP中生成HTML文件静态页,在后续的访问可以直接加载静态文件而无需再次执行PHP脚本。这可以提高网站性能,减轻服务器负担,并改善页面加载速度。   用一个简单的小项目来说明PHP生成HTML静态页原理,包含:模板分离、自动创建目录、生成静态页、更新静态页、删除静态页、生成列表页+详情页、防重复生成、错误提示等功能。   项目结构 / ├── template/ # 模板文件夹 │ ├── index.h......

    2014-02-17
    15990
  • PHP利用正则表达式提取内容中图片的函数

      用PHP开发产品中经常需要从某部分内容中提取出图片,比如在一个表单中,我们需要从内容中提取出图片的路径当作缩略图,这时就可以用正则表达式的规则匹配的方法来提取出图片路径,利用下面这个函数来完成。 &lt;?php function getImgs($content,$order='ALL'){ $pattern="//"; preg_match_all($pattern,$content,$match); ......

    2015-01-07
    23820
  • jQuery实现文件列表和缩略图模式切换

      做一个简单的仿网盘前端页面,实现文件以列表模式和缩略图模式切换功能。 &lt;!DOCTYPE html&gt; &lt;html lang="zh-CN"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;列表/缩略图模式切换&lt;/title&gt; &lt;script src="https://code.jquery.com/jquery-1......

    2015-03-09
    17250
  • PHP文字水印,缩略图,图片水印实现类与用法示例

      本文实例讲述了PHP开发的文字水印,缩略图,图片水印实现类与用法。分享给大家供大家参考,具体如下:   1.实现类ImageToTest.class.php参考代码 class ImageToTest { /** * 图片的基本信息 */ private $info; private $image; public function __construct($src){ $info = getima......

    2020-08-22
    19930
  • PHP防止短时间内刷阅读量的方法

      防止短时间内刷阅读量是一个常见的需求,通常需要使用一些技术手段来检测和限制恶意访问。以下是一些可能的方法:   使用 Cookie 或 Session:   通过在用户访问时设置一个 Cookie 或 Session 记录,记录用户最后一次访问的时间戳。在下一次访问时,可以检查当前时间与上次访问的时间戳之间的差异,如果差异太小,则可能是刷阅读量的行为。 session_start(); $currentTime = time();......

    2021-05-06
    17940
  • PHP使用QR Code生成二维码实例

      要在PHP中生成二维码,可以使用第三方库,其中一个流行的是PHP QR Code库。以下是一个简单的示例,演示如何使用PHP QR Code库生成二维码。   使用 Composer 安装 PHP QR Code: composer require chillerlan/php-qrcode   PHP 生成二维码示例 &lt;?php // 引入 Composer 的自动加载文件 require_once 'vendor/aut......

    2021-10-07
    17750
  • 解决 PHP 8.1 隐式类型转换导致缩略图生成错误

      这几天解决了一个困扰已久的问题,我的博客系统在文章上传图片生成缩略图时,在本地测试环境没有任何问题,但在服务器环境中总是生成缩略图失败,报错:"Implicit conversion from float"。排查了 PHP 和环境扩展组件库、目录权限、图片格式大小等都没有问题。在百思不得其解时,我注意到了一个平时不太注意的细节,我在本地测试环境用的是 PHP 8.0,服务器上用的是 PHP 8.1,经过反复测试问题果然出在这里。  ......

    2023-09-04
    13310