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 縮放gif和png圖透明背景變成黑色的解決方法
工作中需要縮放一些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,gif和png三種格式圖片的說明
我們最理想的圖片是容量小質量高清晰的,這得根據不同圖片的性質選擇不同的輸出格式。網上現今常用的圖片格式有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以上中已經移除了這個功能 解決辦法: