php实现等比例压缩图片

下面是详细的php实现等比例压缩图片的攻略。

一、确定图片尺寸

实现等比例压缩图片,第一步就是要确定要压缩到的尺寸。对于一个要压缩的图片,我们可以根据它的长和宽来计算它的比例。在压缩过程中,我们希望这个比例能够保持不变,这意味着长和宽都要进行按比例缩放。

我们可以通过下面的代码来计算图片在按比例缩放后的长和宽。

// $src_path:原始图片路径
// $max_width:目标宽度
// $max_height:目标高度
list($src_width, $src_height, $type) = getimagesize($src_path);

$ratio_orig = $src_width / $src_height;

if($max_width / $max_height > $ratio_orig) {
    $max_width = $max_height * $ratio_orig;
} else {
    $max_height = $max_width / $ratio_orig;
}

在上面的代码中,我们使用了PHP内置的getimagesize()函数获取了图片的长、宽、类型等信息,然后通过计算得到了按比例缩放后的长和宽。

二、生成缩略图

在得到了按比例缩放后的长和宽之后,我们就可以生成缩略图了。这个步骤需要使用PHP的GD图像处理库,我们可以通过下面的代码来实现。

// $src_path:原始图片路径
// $dst_path:目标图片路径
// $max_width:目标宽度
// $max_height:目标高度
$dst_image = imagecreatetruecolor($max_width, $max_height);
$src_image = null;

if($type == IMAGETYPE_JPEG) {
    $src_image = imagecreatefromjpeg($src_path);
} elseif($type == IMAGETYPE_PNG) {
    $src_image = imagecreatefrompng($src_path);
} elseif($type == IMAGETYPE_GIF) {
    $src_image = imagecreatefromgif($src_path);
}

imagecopyresampled(
    $dst_image,
    $src_image,
    0, 0, 0, 0,
    $max_width, $max_height,
    $src_width, $src_height
);

if($type == IMAGETYPE_JPEG) {
    imagejpeg($dst_image, $dst_path, 90);
} elseif($type == IMAGETYPE_PNG) {
    imagepng($dst_image, $dst_path);
} elseif($type == IMAGETYPE_GIF) {
    imagegif($dst_image, $dst_path);
}

在上面的代码中,我们使用了GD库中的imagecreatetruecolor()函数来创建一个新的缩略图,然后使用不同的图片类型对应的GD库函数来读取原始图片。最后,我们使用imagecopyresampled()函数将原始图片缩小并且按比例绘制到新的缩略图中,并保存到目标路径。

三、示例说明

下面我们来看两个具体的示例,分别压缩了jpg和png格式的图片。

示例一:压缩一张jpg图片

对于一张尺寸为600x900的jpg图片,我们希望将它压缩为宽度最大为400,高度最大为400的缩略图。实现代码如下:

$src_path = './example.jpg';
$dst_path = './example_thumb.jpg';
$max_width = 400;
$max_height = 400;

list($src_width, $src_height, $type) = getimagesize($src_path);

$ratio_orig = $src_width / $src_height;

if($max_width / $max_height > $ratio_orig) {
    $max_width = $max_height * $ratio_orig;
} else {
    $max_height = $max_width / $ratio_orig;
}

$dst_image = imagecreatetruecolor($max_width, $max_height);
$src_image = imagecreatefromjpeg($src_path);

imagecopyresampled(
    $dst_image,
    $src_image,
    0, 0, 0, 0,
    $max_width, $max_height,
    $src_width, $src_height
);

imagejpeg($dst_image, $dst_path, 90);

示例二:压缩一张png图片

对于一张尺寸为800x1200的png图片,我们希望将它压缩为宽度最大为600,高度最大为600的缩略图。实现代码如下:

$src_path = './example.png';
$dst_path = './example_thumb.png';
$max_width = 600;
$max_height = 600;

list($src_width, $src_height, $type) = getimagesize($src_path);

$ratio_orig = $src_width / $src_height;

if($max_width / $max_height > $ratio_orig) {
    $max_width = $max_height * $ratio_orig;
} else {
    $max_height = $max_width / $ratio_orig;
}

$dst_image = imagecreatetruecolor($max_width, $max_height);
$src_image = imagecreatefrompng($src_path);

imagecopyresampled(
    $dst_image,
    $src_image,
    0, 0, 0, 0,
    $max_width, $max_height,
    $src_width, $src_height
);

imagepng($dst_image, $dst_path);

这两个示例代码可以直接在php文件中运行,生成压缩后的图片。需要注意的是,这些代码在执行之前需要确保服务器上已经安装了GD图像处理库。如果没有安装,需要先通过包管理工具进行安装。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现等比例压缩图片 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • php生成html文件方法总结

    PHP生成HTML文件方法总结 本文将介绍如何使用PHP生成HTML文件的方法。PHP作为一种通用的脚本语言,可以方便地生成HTML文件。 方法一:使用文件读写 PHP提供了文件读写功能,我们可以使用它来生成HTML文件。下面是一个示例代码: <?php $html = ‘<html><head><title>My …

    PHP 2023年5月26日
    00
  • 浅谈PHP设计模式的命令模式

    简介: 命令模式,又称之为动作模式或者事务模式,属于行为型的设计模式。将不同的请求封装成不同的请求对象,以便使用不同的请求;角色都会用饭馆来举例子:命令下达者:顾客命令接受者:服务员命令本身: 菜单命令执行者:厨师 适用场景: Laravel的事件调度机制有用到了命令模式。 想要解耦服务端和调用端的时候。 优点: 当去修改命令的时候,直接与命令接受者进行通信…

    PHP 2023年4月18日
    00
  • PHP生成短网址的思路以及实现方法的详解

    针对“PHP生成短网址的思路以及实现方法的详解”的问题,我将进行如下的完整阐述: 1. 思路 网站的短网址生成通常采用 URL 缩短算法。这个算法的基本思路就是把长网址映射成一个短的字符串存储在数据库中,然后通过访问这个短字符串来跳转至原始 URL 地址。 下面是具体的实现思路: 先定义一个长短网址转换的函数,该函数接收一个长网址参数,并返回一个新的短网址。…

    PHP 2023年5月27日
    00
  • php输出表格的实现代码(修正版)

    绝大多数的网站开发项目需要输出表格,而在PHP应用中,通常我们使用HTML表格标签来完成这一过程。下面是实现输出表格的PHP代码示例,并附有详细的攻略说明。 代码示例 <?php $rows = array( array(‘name’ => ‘李雷’, ‘age’ => 23, ‘gender’ => ‘男’), array(‘nam…

    PHP 2023年5月23日
    00
  • php file_get_contents函数轻松采集html数据

    下面是关于 “php file_get_contents函数轻松采集html数据” 的完整攻略。 什么是php file_get_contents函数 file_get_contents() 函数是一个用来读取整个文件内容的PHP函数。它可以读取本地文件或者远程文件的内容,并将这些内容以字符串的形式返回。 使用场景 file_get_contents() 函…

    PHP 2023年5月27日
    00
  • 微信小程序实现用table显示数据库反馈的多条数据功能示例

    下面我会为你提供一份完整的攻略,详细地讲解如何实现“微信小程序实现用table显示数据库反馈的多条数据功能示例”。 1. 准备工作 在开始之前,我们需要先进行准备工作。具体工作如下:1. 准备微信开发者工具,确保能够正常创建小程序项目;2. 准备一个数据源,可以是本地文件夹或者远程数据库服务器。 2. 创建表格组件 在小程序页面的wxml文件中添加一个tab…

    PHP 2023年5月30日
    00
  • PHP之预定义接口详解

    PHP之预定义接口详解 什么是预定义接口 PHP中的预定义接口是指在类的内部定义特定的方法,以实现与其他对象或系统交互的标准化方式。这些接口已经在PHP中定义好了,并且拥有了相应的语法和特性。实现这些预定义接口可以使你的类可以更好的兼容PHP中的其他类和系统。 下面我们详细介绍几个常用的PHP预定义接口及其实现方法。 Iterator Iterator接口是…

    PHP 2023年5月26日
    00
  • 微信小程序组件 marquee实例详解

    微信小程序组件 marquee实例详解 什么是marquee组件? marquee组件是微信小程序自带的一种用于文字、图片等滚动展示的UI组件,可以实现字幕、公告等效果,非常适合一些需要重点宣传或广告展示的场合。 marquee组件的基本用法 marquee组件的基本用法非常简单,以下是一个简单的使用示例: <marquee direction=&qu…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部