搜尋
首頁後端開發PHP問題php如何壓縮圖片不失真

php如何壓縮圖片不失真

May 06, 2023 pm 06:26 PM

隨著網路技術的發展,圖片已經成為網頁設計中不可或缺的一部分,但是隨之而來的是載入速度的問題。為了讓網頁速度更快,圖片必須進行壓縮,但是壓縮過程中很容易就會造成圖片失真,這時我們就需要使用更進階的技術。在本文中,我們將介紹如何使用PHP進行圖片壓縮不失真。

一、使用PHP的GD庫

PHP的GD庫是一種常用的圖形庫,可以用來處理各種圖形操作,如:縮放、裁剪、旋轉、加浮水印等。透過利用這個庫,我們可以將圖片壓縮到指定大小,而不會失真。下面我們就來看看如何使用PHP的GD庫進行圖片壓縮。

首先,確保你的PHP安裝了GD庫。如果沒有安裝,可以透過以下命令進行安裝:

sudo apt-get install php-gd

在安裝好後,我們就可以編寫壓縮圖片的程式碼了。首先,我們需要載入圖片:

<?php // 加载原图片
$src_file = 'source.jpg';
$image = imagecreatefromjpeg($src_file);
?>

接著,我們需要指定壓縮後的圖片大小:

<?php // 加载原图片
$src_file = 'source.jpg';
$image = imagecreatefromjpeg($src_file);

// 指定压缩后的图片大小
$max_width = 600;
$max_height = 400;
?>

然後,我們需要計算圖片的實際大小及壓縮比例:

<?php // 加载原图片
$src_file = 'source.jpg';
$image = imagecreatefromjpeg($src_file);

// 指定压缩后的图片大小
$max_width = 600;
$max_height = 400;

// 计算出图片的实际大小及压缩比例
$width = imagesx($image);
$height = imagesy($image);
$scale = min($max_width/$width, $max_height/$height, 1);

// 计算出压缩后的大小
$new_width = round($scale*$width);
$new_height = round($scale*$height);
?>

現在,我們已經有了圖片的實際大小及壓縮比例,下一步就是將圖片壓縮到指定的大小:

<?php // 加载原图片
$src_file = 'source.jpg';
$image = imagecreatefromjpeg($src_file);

// 指定压缩后的图片大小
$max_width = 600;
$max_height = 400;

// 计算出图片的实际大小及压缩比例
$width = imagesx($image);
$height = imagesy($image);
$scale = min($max_width/$width, $max_height/$height, 1);

// 计算出压缩后的大小
$new_width = round($scale*$width);
$new_height = round($scale*$height);

// 创建新图片
$new_image = imagecreatetruecolor($new_width, $new_height);

// 复制原图片到新图片并压缩
imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// 保存压缩后的图片
imagejpeg($new_image, 'compressed.jpg', 90);
?>

最後一步就是保存壓縮後的圖片,這裡我們使用imagejpeg()函數儲存為JPEG格式,第三個參數為壓縮質量,數值越大,質量越高,檔案也會越大。

二、使用第三方函式庫:TinyPNG

除了使用PHP的GD函式庫進行壓縮外,我們還可以使用一些第三方函式庫來操作。其中,一個很不錯的壓縮圖庫就是TinyPNG。它可以將JPEG、PNG等圖片壓縮到最小,而且完全不會失真。

首先,我們需要到TinyPNG的官網進行註冊,並產生一個API Key。然後,就可以直接透過API來壓縮圖片了。以下是使用TinyPNG進行圖片壓縮的程式碼:

<?php require_once 'vendor/autoload.php';

// 指定图片路径
$file = 'source.jpg';

// 压缩图片并保存
\Tinify\setKey("YOUR_API_KEY");
\Tinify\fromFile($file)->toFile('compressed.jpg');
?>

這裡,我們使用了官方提供的PHP SDK,並在程式碼中指定了API Key,然後就可以使用fromFile()方法載入圖片進行壓縮了,toFile()方法則是將壓縮後的圖片儲存到指定路徑。

小結

無論是使用PHP的GD庫還是第三方庫TinyPNG進行圖片壓縮,都可以在保證圖片品質的同時,盡可能地減少圖片檔案大小,提高網站載入速度。在實際專案中,我們需要根據具體情況進行選擇,並靈活使用。做好圖片壓縮工作,既可以提高網頁效能,也可以為使用者帶來更好的存取體驗。

以上是php如何壓縮圖片不失真的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。