1. 程式人生 > >php 縮放gif和png圖透明背景變成黑色的解決方法

php 縮放gif和png圖透明背景變成黑色的解決方法

工作中需要縮放一些png、gif圖然後在去Imagecopymerge,可是發現使用了imagecreatetruecolor和imagecopyresampled後發現本來透明的背景圖變成了黑色。

$img = imagecreatetruecolor(200, 200); 
//2.上色 
$color=imagecolorallocate($img,255,255,255); 
//3.設定透明 
imagecolortransparent($img,$color); 
imagefill($img,0,0,$color); 

然後再進行imagecopyresampled和Imagecopymerge
就沒有問題了

個人專案程式碼:

class uploadImg {
    var $smallFolder = "../upload/";//縮圖存放路徑
    function getInfo($photo) {
        $imageInfo = getimagesize($photo);
        $imgInfo["width"] = $imageInfo[0];
        $imgInfo["height"] = $imageInfo[1];
        $imgInfo["type"] = $imageInfo[2];
        $imgInfo["name"
] = basename($photo); $name = explode(".",$photo);//將上傳前的檔案以“.”分開取得檔案型別 $imgCount = count($name);//獲得擷取的數量 $imgInfo["extension"] = $name[$imgCount-1];//取得檔案的型別 return $imgInfo; } function smallImg($photo,$smallFolder,$width=128,$height=128,$limit=false) { if
($smallFolder!='') $this->smallFolder = $smallFolder; $imgInfo = $this->getInfo($photo); $newName = substr($imgInfo["name"],0,strrpos($imgInfo["name"], ".")).".".$imgInfo["extension"];//新圖片名稱 if($imgInfo["type"] == 1) { $img = imagecreatefromgif($photo); } elseif($imgInfo["type"] == 2) { $img = imagecreatefromjpeg($photo); } elseif($imgInfo["type"] == 3) { $img = imagecreatefrompng($photo); } else { $img = ""; } if(empty($img)) return False; if($limit==true){ $width = ($width > $imgInfo["width"]) ? $imgInfo["width"] : $width; $height = ($height > $imgInfo["height"]) ? $imgInfo["height"] : $height; $srcW = $imgInfo["width"]; $srcH = $imgInfo["height"]; if ($srcW * $width > $srcH * $height) { $height = round($srcH * $width / $srcW); } else { $width = round($srcW * $height / $srcH); } } if (function_exists("imagecreatetruecolor")) { $newImg = imagecreatetruecolor($width, $height); /* --- 用以處理縮放gif和png圖透明背景變黑色問題 開始 --- */ if(strtolower($imgInfo["extension"])=='png' || strtolower($imgInfo["extension"])=='gif'){ $color = imagecolorallocate($newImg,255,255,255); imagecolortransparent($newImg,$color); imagefill($newImg,0,0,$color); } /* --- 用以處理縮放gif和png圖透明背景變黑色問題 結束 --- */ ImageCopyResampled($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]); } else { $newImg = imagecreate($width, $height); ImageCopyResized($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]); } if ($this->toFile) { if (file_exists($this->smallFolder.$newName)) @unlink($this->smallFolder.$newName); ImageJPEG($newImg,$this->smallFolder.$newName,100); return $newName; } else { ImageJPEG($newImg); } ImageDestroy($newImg); ImageDestroy($img); return $newName; } }

相關推薦

php gifpng透明背景變成黑色解決方法

工作中需要縮放一些png、gif圖然後在去Imagecopymerge,可是發現使用了imagecreatetruecolor和imagecopyresampled後發現本來透明的背景圖變成了黑色。 $img = imagecreatetruecolor(

android 圖片透明變成黑色解決辦法

原因是因為圖片進行快取到本地,再取出時,圖片格式被壓縮錯誤。 比如,原圖為png的型別,但是 bmp.compress(Bitmap.CompressFormat.JPEG, 100,outputStream); 被預設為了JPEG。所以透明的地方肯定出現錯誤

js仿百度地圖拖拽、、添加層功能(原創)

ets tle clas 火狐 相對 inner tlist posit css 最近項目中完成的需求,仿百度地圖中的功能: 要求:1.底層圖可以拖拽、縮放。    2.拖拽一個圖標,在底層圖上對應位置添加一個標註點,該標註點位置要隨底層圖移動。    3.添加的標註

Android 同時播放動畫位移動畫 時, 位移的路徑會發生偏移.

      不能理解的bug.       Android 同時播放縮放動畫和位移動畫 時, 位移的路徑會發生偏移.       

安卓基礎之載入本地大

1.獲取手機螢幕解析度 WindowManager wm= (WindowManager)getSystemService(WINDOW_SERVICE); int height=wm.getDefaultDisplay().getHeight(); int widt

Swift封裝圖片瀏覽,多張圖片瀏覽,,gif圖片的播放

封裝了一個圖片瀏覽器,實現了圖片的瀏覽,縮放,支援多張圖片的瀏覽縮放,儲存到相簿等功能 實現功能 1.圖片瀏覽,根據圖片的大小適應,瀏覽長圖 2.多張圖片左右滑動瀏覽 3.圖片的縮放 4.播放gif圖片 實現技術 1.使用UICollectio

WPF 觸控式螢幕多點觸控影象的旋轉移動

<dxc:DXWindow xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/x

微信小程式仿照微信拖動圖片擷取頭像

效果圖 整體思路: 實現圖片的縮放和拖動; 在圖片上方蓋上中間鏤空的半透明遮罩; 根據擷取方框區域的圖片。截圖時,在方框區域將擷取的圖片繪製出來,然後使用wx.canvasToTempFilePath擷取圖片。 實現過程和遇到的問題:

C# Form窗體的功能操作,無邊框窗體的移動,無邊框窗體的尺寸,儲存恢復窗體的尺寸座標資訊

/// <summary> /// 此類用於實現一些可用於Form窗體的功能操作 /// </summary> class FormTool { //using System.Runtime.InteropServices; [

Unity3d通過滑鼠檢視旋轉物體

1.通過滑鼠縮放檢視,鍵盤移動檢視 using UnityEngine; using System.Collections; namespace DigitalRuby.Earth { public class MoveScript : MonoBehaviou

jpg,gifpng三種格式圖片的說明

我們最理想的圖片是容量小質量高清晰的,這得根據不同圖片的性質選擇不同的輸出格式。網上現今常用的圖片格式有jpg、gif、png,至於bmp、svg、tif等格式由於檔案大或瀏覽器不支援等原因不建議使用。 常用圖片格式的特點: jpg有損、檔案小 是一種有失真壓縮格式,能夠將影象壓縮在很小的儲存空間,影象中重

圖片時java.lang.IllegalArgumentException: pointerIndex out of range解決方案

package com.example.webproject; import android.app.Activity; import android.graphics.Matrix; import android.graphics.PointF; import andro

Java修改圖片png格式透明背景大小解析度

import java.awt.Graphics2D; import java.awt.Image; import java.awt.Transparency; import java.awt.image.BufferedImage; import java.io.File

C# png格式影象轉jpg時透明背景變為黑色問題

Image img = Image.FromFile(filename); // Assumes myImage is the PNG you are converting using (var b = new Bitmap(img.Width, img.Height))

vm虛擬機時間主機時間相差幾小時的解決方法

ntpdatevm虛擬機時間和主機時間相差幾小時的解決方法步驟一:#vi /etc/sysconfig/clockZONE="Asia/Shanghai"步驟二:#cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime步驟三:ntpdate edu.ntp

SpringMVC提交數據遭遇基礎類型日期類型報400錯誤解決方法

筆記 運行 inpu 遭遇 imp public 增加 試用 too 使用SpringMVC開發的時候,頁面如果有日期格式的數據,後臺接受也是java.util.Date,則報告400錯誤 。下面是解決方案的演示示例: 這個是實體類,裏面createDate就是ja

php ajax提交post請求出現陣列被截斷情況的解決方法

一、場景 今天做儲存專題商品列表的時候發現,前端明明有2300多條資料,但是實際服務端接受存入資料庫才166條 二、解決過程 經過除錯發現前端頁面提交post請求時資料量是正確的,但到服務端只能接受到166條。 一開始以為是post請求長度超過限制,不過看了下請求內容才200多K

vue打包,,圖片,背景沒有渲染出來的解決方法

找到config資料夾下的index.js檔案修改一下位置 看清楚是 build(上邊還有個dev 是開發環境下的配置,不需要改動)下的 assetsPublicPath :將‘/’改為‘./’ 在css中寫的background-img的路徑出錯 需要找到build資料夾下的utils.js,修改一

arcgis10.2新增天地圖底顯示為空白的解決方法

在使用10.2新增底圖的時候,會出現地圖空白的現象 ,檢視arcgis online也是連線正常的   1.右擊內容列表裡的【底圖】圖層,點選【取消分組】,即可顯示地圖。 2.右擊【引用】圖層,點選【取消分組】,但此時顯示是一片黑,標註基本看不見。再次右擊該圖層,

更換PHP 5.4以上版本後Dedecms後臺登入空白的解決方法

把PHP的版本從5.2.14升到5.4.15,升級完後dedecms後臺開啟空白,檢查各種許可權和檔案,沒有問題,那就有可能是PHP版本函式的問題,它是用session_register來註冊一個session變數,但是在php5.4以上中已經移除了這個功能 解決辦法: