日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

php修改JPG格式图片的dpi

發(fā)布時(shí)間:2023/12/19 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 php修改JPG格式图片的dpi 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  最近因?yàn)闃I(yè)務(wù)需求,需要把一批jpg格式圖片的dpi從72改為300,圖片有三萬張,一個(gè)一個(gè)用ps搞的話就太難受了,所以想寫個(gè)腳本批量處理,結(jié)合網(wǎng)上的資料搞了半天時(shí)間終于弄出來了,腳本跑了10個(gè)小時(shí)左右把所有圖片都處理好了,下面說下我是怎么做的。

  最開始的時(shí)候,在想用php自帶的gd庫能不能處理,在網(wǎng)上搜了一下,找到了一份代碼:

  

function setDPI($filename){

    $file = file_get_contents($filename);

//數(shù)據(jù)塊長度為9
    $len = pack("N", 9);
//數(shù)據(jù)塊類型標(biāo)志為pHYs
    $sign = pack("A*", "pHYs");
//X方向和Y方向的分辨率均為300DPI(1像素/英寸=39.37像素/米),單位為米(0為未知,1為米)
    $data = pack("NNC", 300 * 39.37, 300 * 39.37, 0x01);
//CRC檢驗(yàn)碼由數(shù)據(jù)塊符號和數(shù)據(jù)域計(jì)算得到
    $checksum = pack("N", crc32($sign . $data));
    $phys = $len . $sign . $data . $checksum;

    $pos = strpos($file, "pHYs");
    if ($pos > 0) {
        //修改pHYs數(shù)據(jù)塊
        $file = substr_replace($file, $phys, $pos - 4, 21);
    } else {
        //IHDR結(jié)束位置(PNG頭固定長度為8,IHDR固定長度為25)
        $pos = 33;
        //將pHYs數(shù)據(jù)塊插入到IHDR之后
        $file = substr_replace($file, $phys, $pos, 0);
    }

    file_put_contents($filename,$file);
}

  試了下這份代碼,發(fā)現(xiàn)dpi確實(shí)變了,但是只能從72dpi變成96dpi,這就很尷尬了。最后在stackoverflow上搜了下,發(fā)現(xiàn)都比較推薦使用imagick這個(gè)插件。然后大部分時(shí)間都花在安裝這個(gè)插件上了(淦)。下面將說明下怎么安裝這個(gè)插件。

  

  首先打印出phpinfo,根據(jù)自己的php版本,參數(shù)下載對應(yīng)版本的插件,插件下載地址:https://pecl.php.net/package/imagick 或者 https://windows.php.net/downloads/pecl/releases/imagick/,下載好后解壓出來,就跟下面的圖一樣

  然后把php_imagick.dll丟到php的ext文件下

  接著這個(gè)解壓出來的文件里面還有其他的dll文件,把這些dll后綴的文件(dll后綴的喔)丟到php文件夾里面。

  做完這些,重啟下服務(wù),然后打印phpinfo,可以看到擴(kuò)展已經(jīng)識別出來了。如果擴(kuò)展沒有識別出來,那檢查下電腦環(huán)境變量里面的php環(huán)境變量是不是跟你裝擴(kuò)展的php版本不一致(我開始的時(shí)候忘記了這個(gè)事,一直沒識別出來)。

  裝完php的擴(kuò)展后,還需要裝上ImageMagick這個(gè)軟件,下載地址是 http://ftp.icm.edu.pl/packages/ImageMagick/binaries/,根據(jù)phpinfo里面的提示,找到對應(yīng)的版本下載,下載dll版的。

  安裝完成后,輸入magick --version命令,對比下phpinfo里的信息,看是否安裝正確。

  

  最后就可以寫代碼轉(zhuǎn)化圖片的dpi了。我是直接寫的腳本,如果說要集成進(jìn)框架里面應(yīng)該還需要其他的操作。最后呢,代碼如下:

function handleImg($input){
    // if(!is_dir($out_dir)){
    //     mkdir($out_dir,0777,true);
    // }
    $image = new Imagick();
    $image->readImage($input);
    $image->setImageResolution(300,300);
    $image->resampleImage(300,300,imagick::FILTER_UNDEFINED,0);
    $image->writeImage($input);
}

  input是要處理圖片的文件路徑,因?yàn)橐驗(yàn)橛脖P空間不夠了,我直接把原圖片給覆蓋了。最后處理出來的效果如下:

  

總結(jié)

以上是生活随笔為你收集整理的php修改JPG格式图片的dpi的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。