成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

PHP處理高分辨率圖片的問(wèn)題

thursday / 2696人閱讀

摘要:中圖片的處理都是使用了庫(kù),這個(gè)庫(kù)提供了很多方法讓可以更方便地對(duì)圖片進(jìn)行操作,支持的圖片格式如下回到一開(kāi)始的問(wèn)題,那個(gè)小伙伴需要處理高分辨的圖片,圖片大小必然很大,所以就會(huì)出現(xiàn)內(nèi)存不夠的情況,解決方法還是有很多的。

今天小伙伴在群里問(wèn)了這么一個(gè)問(wèn)題:

出現(xiàn)這種情況就是因?yàn)閮?nèi)存不足,PHP程序直接退出了,報(bào)錯(cuò)大概如下:

上圖的意思就是說(shuō),我們能使用的內(nèi)存最大是8M,但是處理這個(gè)圖片還需要額外的41bytes,就會(huì)導(dǎo)致內(nèi)存不足,這是一個(gè)很?chē)?yán)重的錯(cuò)誤。在對(duì)圖片進(jìn)行操作前需要將圖片的所有信息讀入內(nèi)存中,同時(shí)還會(huì)使用另一部分內(nèi)存同于處理計(jì)算并緩存輸出,所以內(nèi)存大小的使用還是和圖片的大小有關(guān)。

PHP中圖片的處理都是使用了GD庫(kù),這個(gè)庫(kù)提供了很多方法讓PHP可以更方便地對(duì)圖片進(jìn)行操作,支持的圖片格式如下:

回到一開(kāi)始的問(wèn)題,那個(gè)小伙伴需要處理高分辨的圖片,圖片大小必然很大,所以就會(huì)出現(xiàn)內(nèi)存不夠的情況,解決方法還是有很多的。

1. 設(shè)置圖片最大可上傳的大小

前端上傳前可以先檢測(cè)下大小,如果超過(guò)最大值直接就不請(qǐng)求接口,同時(shí)為安全起見(jiàn),后端接收到請(qǐng)求后也要檢測(cè)大小,防止程序異常退出。

2. 壓縮圖片 3. 關(guān)閉memory_limit

群里的小伙伴最后使用了一種簡(jiǎn)單粗暴的方式解決了該問(wèn)題,直接在PHP中關(guān)閉memory_limit

 set_time_limit(0);
@ini_set("memory_limit","-1");

這樣雖然解決了問(wèn)題,但不優(yōu)雅也不安全,同樣在php.ini配置文件中將memory_limit的值設(shè)置很大也能解決:

memory_limit = 256M

PHP代碼中也可以這樣設(shè)置:

ini_set("memory_limit", "256M");

上面我們將memory_limit參數(shù)固定了,這就帶來(lái)一個(gè)弊端,因?yàn)榇蠖鄶?shù)情況下不需要這么大的內(nèi)存,有點(diǎn)浪費(fèi)資源,最好的做法就是根據(jù)需要來(lái)設(shè)置memory_limit,我寫(xiě)了一個(gè)如下方法可供參考:

public function setMemoryLimit($filename){
    // 控制執(zhí)行時(shí)間
    set_time_limit(50);

    $maxMemoryUsage = 256M;
    $width = 0;
    $height = 0;
    $size = ini_get("memory_limit");

    // 獲取圖片大小
    list($width, $height) = getimagesize($filename);

    // 計(jì)算需要的內(nèi)存,并轉(zhuǎn)換成"M"單位
    // 4 因?yàn)閜ng圖片一個(gè)像素有4字節(jié)
    // 1.5 是一個(gè)調(diào)整因子,因?yàn)閙emory_limit不是那么精確
    // 詳細(xì)可以查看: http://php.net/imagecreatefromjpeg#76968
    $size = $size + floor(($width * $height * 4 * 1.5 + 1048576) / 1048576);

    if ($size > $maxMemoryUsage){
        $size = $maxMemoryUsage;
   }

   // 更新
   ini_set("memory_limit",$size."M");
}

最后說(shuō)一下,網(wǎng)上說(shuō)GD庫(kù)是比較耗內(nèi)存的,但我這里沒(méi)有做過(guò)測(cè)試。Github上有個(gè)C的項(xiàng)目叫libvips/libvips

可以在不占用很多內(nèi)存的情況下提高圖片處理的速度,這是地址:https://github.com/libvips/li...,有時(shí)間可以學(xué)習(xí)下。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/31003.html

相關(guān)文章

  • python數(shù)字圖像處理實(shí)現(xiàn)圖像形變與縮放

      小編寫(xiě)這篇文章的主要目的,主要是給大家介紹關(guān)于Python的一些事宜,比如會(huì)涉及到圖像處理相關(guān)的問(wèn)題,比如會(huì)涉及到相關(guān)的圖像的形變與縮放,那么,遇到這種問(wèn)題的話,具體要怎么操作呢?下面就給大家詳細(xì)解答下?! kimage的transform模塊  圖形的放大與縮小,應(yīng)用到的技術(shù)是skimage的transform模塊,函數(shù)比較多,功能齊全?! ?、改變圖片尺寸resize  函數(shù)格式為:  ...

    89542767 評(píng)論0 收藏0
  • 又拍云圖片處理集群架構(gòu)

    摘要:又拍云圖片處理集群規(guī)模及架構(gòu)圖片處理集群規(guī)模臺(tái)核內(nèi)存的服務(wù)器,相當(dāng)于有核的處理能力。平時(shí)花瓣網(wǎng)的圖片處理量就已經(jīng)占集群超過(guò),一下子翻幾十倍的處理量進(jìn)來(lái),肯定會(huì)對(duì)作圖服務(wù)造成影響。 黃慧攀,又拍云 CTO。最早在 2001 年開(kāi)始 web 開(kāi)發(fā)工作;2006 年創(chuàng)辦 yo2.cn 優(yōu)博網(wǎng)(WordPress 博客平臺(tái));2010 年加入又拍云開(kāi)始構(gòu)建第一代云存儲(chǔ)和云 CDN 服務(wù)。曾從事前端、...

    n7then 評(píng)論0 收藏0
  • php 上傳圖片造成內(nèi)存溢出 Allowed memory size of ... bytes

    摘要:場(chǎng)景圖片上傳,是網(wǎng)站開(kāi)發(fā)常見(jiàn)的需求用戶上傳圖片后端處理圖片壓縮生成縮略圖裁剪加水印等等保存在特定的文件夾中,在這個(gè)過(guò)程中,有時(shí)候上傳大圖片會(huì)出現(xiàn)錯(cuò)誤,就是內(nèi)存溢出的意思。 [場(chǎng)景] ? ? 圖片上傳,是網(wǎng)站開(kāi)發(fā)常見(jiàn)的需求——用戶上傳圖片=>后端處理圖片(壓縮、生成縮略圖、裁剪、加水印等等...)=>保存在特定的文件夾中,在這個(gè)過(guò)程中,有時(shí)候上傳大圖片會(huì)出現(xiàn)錯(cuò)誤Allowed memor...

    CarterLi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<