Jadual Kandungan
回复讨论(解决方案)
Rumah pembangunan bahagian belakang tutorial php 为什么上传图片中含有透明通道,图片就会变成黑色?

为什么上传图片中含有透明通道,图片就会变成黑色?

Jun 23, 2016 pm 01:58 PM
muat naik gambar telus

p.s. 改的图片上传类原文地址:http://blog.csdn.net/a957651480/article/details/23124257

<?phpclass Images{	var $inputName;                 //控件名	var $allowType = array(				'image/gif','image/jpg','image/jpeg','image/png','image/x-png','image/pjpeg'	);	                           //上传类型	var $allowSize = 1048576;	//限制大小	var $saveDir = "";      //保存目录	var $FileName = ""; //文件名	var $isRename = false;               //是否重命名,默认为true	var $errID = 0;                     //错误代码,默认为0	var $errMsg = "";                   //错误信息	var $savePath = "";                 //保存路径	var $ImgSize = 0; //图片尺寸	function __construct($inputName,$allowType="",$allowSize="",$saveDir="",$isRename=true){		if(empty($inputName)){			$this->chk_err(-1);       //无传入控件名		}else{			$this->inputName = $inputName;		}		if(!empty($allowType)) $this->allowType = $allowType;		if(!empty($allowSize)) $this->allowSize = $allowSize;		if(!empty($saveDir)) $this->saveDir = $saveDir;		if(!empty($isRename)) $this->isRename = $isRename;	}	function is_uploaded(){		if(empty($_FILES[$this->inputName]['name'])){			$this->chk_err(4);    //没有文件被上传		}else{			if(is_uploaded_file($_FILES[$this->inputName]['tmp_name'])){				return true;			}else{				$this->chk_err(-2);       //文件上传不合法			}		}	}	function chk_type(){		if(!in_array($_FILES[$this->inputName]['type'],$this->allowType)){			$this->chk_err(-3);         //上传的文件类型不被允许		}else{			return true;		}	}	function chk_size(){		if($_FILES[$this->inputName]['size'] > $this->allowSize){			$this->chk_err(-4);          //上传的文件过大		}else{			return true;		}	}	function move_uploaded(){        //移动上传文件		if(!$this->is_uploaded()){			return false;		}		if(!$this->chk_size()){			return false;		}		if(!$this->chk_type()){			return false;		}		//重命名		if($this->isRename){			$arrTmp = pathinfo($_FILES[$this->inputName]['name']);			$extension = strtolower($arrTmp['extension']);			$file_newname = $this->FileName; //重命名新文件		}else{			$file_newname = $_FILES[$this->inputName]['name'];		}				if(!file_exists($this->saveDir)){       //判断保存目录是否存在			mkdir($this->saveDir,0777,true);    //建立保存目录		}		//移动文件		$result = move_uploaded_file($_FILES[$this->inputName]['tmp_name'],$this->saveDir."/".$file_newname);		if($result){			$path = $this->savePath = $this->saveDir."/".$file_newname;		//文件的成功保存路径			return $path;		}else{			$this->chk_err($_FILES[$this->inputName]['error']);		}		}	//判断出错信息	function chk_err($errID){		$this->errID = $errID;		switch($this->errID){			case -4:				$this->errMsg = '只能上传1M以内的图片 | <a href="javascript:window.history.back(-1);">[返回]</a>';				break;			case -3:				$this->errMsg = '这不是一张图片 | <a href="javascript:window.history.back(-1);">[返回]</a>';				break;			case -2:				$this->errMsg = '文件上传不合法 | <a href="javascript:window.history.back(-1);">[返回]</a>';				break;			case -1:				$this->errMsg = '无控件名传入 | <a href="javascript:window.history.back(-1);">[返回]</a>';				break;			case 1:				$this->errMsg = '上传的文件超出了php.ini中upload_max_filesize设定的最大值 | <a href="javascript:window.history.back(-1);">[返回]</a>';				break;			case 2:				$this->errMsg = '上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值 | <a href="javascript:window.history.back(-1);">[返回]</a>';				break;			case 3:				$this->errMsg = '文件只有部分被上传 | <a href="javascript:window.history.back(-1);">[返回]</a>';				break;			case 4:				$this->errMsg = '请选择一张图片 | <a href="javascript:window.history.back(-1);">[返回]</a>';				break;			default:				break;		}		return false;		}	function get_errMsg(){		echo $this->errMsg;  //输出错误信息	}    /**     +----------------------------------------------------------     * 取得图像信息     *     +----------------------------------------------------------     * @static     * @access public     +----------------------------------------------------------     * @param string $image 图像文件名     +----------------------------------------------------------     * @return mixed     +----------------------------------------------------------     */    function getImageInfo($img) {        $imageInfo = getimagesize($img);        if( $imageInfo!== false) {            $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]),1));            $imageSize = filesize($img);            $info = array(                "width"		=>$imageInfo[0],                "height"	=>$imageInfo[1],                "type"		=>$imageType,                "size"		=>$imageSize,                "mime"		=>$imageInfo['mime'],            );            return $info;        }else {            return false;        }    }	/**     +----------------------------------------------------------     * 生成缩略图     +----------------------------------------------------------     * @static     * @access public     +----------------------------------------------------------     * @param string $image  原图     * @param string $type 图像格式     * @param string $thumbname 缩略图文件名     * @param string $maxWidth  宽度     * @param string $maxHeight  高度     * @param string $position 缩略图保存目录     * @param boolean $interlace 启用隔行扫描     * @param boolean $is_save 是否保留原图     +----------------------------------------------------------     * @return void     +----------------------------------------------------------     */	     function thumb($image,$is_save=true,$suofang=0,$type='',$maxWidth=500,$maxHeight=500,$interlace=true){        // 获取原图信息       $info  = $this->getImageInfo($image);         if($info !== false) {            $srcWidth  = $info['width'];            $srcHeight = $info['height'];            $type = empty($type)?$info['type']:$type;			$type = strtolower($type);            $interlace  =  $interlace? 1:0;            unset($info);            if ($suofang==1) {                $width  = $srcWidth;                $height = $srcHeight;            } else {                $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 计算缩放比例                if($scale>=1) {                    // 超过原图大小不再缩略                    $width   =  $srcWidth;                    $height  =  $srcHeight;                }else{                    // 缩略图尺寸                    $width  = (int)($srcWidth*$scale);	//147                    $height = (int)($srcHeight*$scale);	//199                }            }            // 载入原图            $createFun = 'ImageCreateFrom'.($type=='jpg'?'jpeg':$type);            $srcImg     = $createFun($image);            //创建缩略图            if($type!='gif' && function_exists('imagecreatetruecolor'))                $thumbImg = imagecreatetruecolor($width, $height);            else                $thumbImg = imagecreate($width, $height);            // 复制图片            if(function_exists("ImageCopyResampled"))                imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth,$srcHeight);            else                imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height,  $srcWidth,$srcHeight);            if('gif'==$type || 'png'==$type) {                //imagealphablending($thumbImg, false);//取消默认的混色模式                //imagesavealpha($thumbImg,true);//设定保存完整的 alpha 通道信息                $background_color  =  imagecolorallocate($thumbImg,  0,255,0);  //  指派一个绿色				imagecolortransparent($thumbImg,$background_color);  //  设置为透明色,若注释掉该行则输出绿色的图            }            // 对jpeg图形设置隔行扫描            if('jpg'==$type || 'jpeg'==$type) 	imageinterlace($thumbImg,$interlace);            //$gray=ImageColorAllocate($thumbImg,255,0,0);            //ImageString($thumbImg,2,5,5,"ThinkPHP",$gray);			            // 生成图片            $imageFun = 'imagejpeg'; 			$length = strlen("00.".$type) * (-1);			$_type = substr($image,-4);			$length = ($type != $_type ? $length+1 : $length);            //裁剪            if ($suofang == 1){								//$thumbname01 = substr_replace($image,"01.".$type,$length);		//大头像				$thumbname02 = substr_replace($image,'.gif',-8);		//小头像				//$imageFun($thumbImg,$thumbname01,100);				$imageFun($thumbImg,$thumbname02,100);				                //$thumbImg01 = imagecreatetruecolor(190,195);                //imagecopyresampled($thumbImg01,$thumbImg,0,0,$_POST['x'],$_POST['y'],190,195,$_POST['w'],$_POST['h']);								$thumbImg02 = imagecreatetruecolor($this->ImgSize,$this->ImgSize);                imagecopyresampled($thumbImg02,$thumbImg,0,0,$_POST['x'],$_POST['y'],$this->ImgSize,$this->ImgSize,$_POST['w'],$_POST['h']);				//$imageFun($thumbImg01,$thumbname01,100);				$imageFun($thumbImg02,$thumbname02,100);												unlink($image);								//imagedestroy($thumbImg01);				imagedestroy($thumbImg02);				imagedestroy($thumbImg);				imagedestroy($srcImg);				return array(/*'big' => $thumbname01 ,*/ 'small' => $thumbname02);	//返回包含大小头像路径的数组				            }else{				if($is_save == false){											//缩略图覆盖原图,缩略图的路径还是原图路径					$imageFun($thumbImg,$image,100);				}else{					$thumbname03 = $image;	//缩略图与原图同时存在,					$imageFun($thumbImg,$thumbname03,100);					imagedestroy($thumbImg);					imagedestroy($srcImg);					return $thumbname03 ;					//返回缩略图的路径,字符串				}			}         }         return false;    }}
Salin selepas log masuk


回复讨论(解决方案)

上传不会改变图片,你可以把图片贴在这里
对于 GD2 缩略图都应 imagecreatetruecolor、imagecopyresampled
如果有透明色,还需 imagecolortransparent

贴出图来看一下

贴出图来看一下





就是一张含透明通道的普通图片……


贴出图来看一下





就是一张含透明通道的普通图片……


你是怎么上传调用的,我刚才试了下你的图片,我这传完没问题

imagecreate 和 imagecreatetruecolor 产生的图片都是黑色的(注意:不是透明的)
你的图片是透明的,自然就将背景显现出来了
也就是说图片是放在黑色的背景上的了
所以被缩放的图片还需要设置透明色

$url = 'http://img.bbs.csdn.net/upload/201404/15/1397545309_839045.gif';$sm = imagecreatefromstring(file_get_contents($url));$dm = imagecreatetruecolor(imagesx($sm), imagesy($sm));//$dm = imagecreate(imagesx($sm), imagesy($sm));$c = imagecolorallocate($dm, 100, 1, 1);imagefill($dm, 0, 0, $c);imagecolortransparent($dm, $c);imagecopyresampled($dm, $sm, 0, 0, 0, 0, imagesx($dm), imagesy($dm), imagesx($sm), imagesy($sm));imagegif($dm);
Salin selepas log masuk


我自己解决了。。还是谢谢你们,是我没有用imagefill事先填充的原因

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan masalah menyimpan gambar secara automatik semasa menerbitkan di Xiaohongshu? Di manakah imej yang disimpan secara automatik semasa menyiarkan? Bagaimana untuk menyelesaikan masalah menyimpan gambar secara automatik semasa menerbitkan di Xiaohongshu? Di manakah imej yang disimpan secara automatik semasa menyiarkan? Mar 22, 2024 am 08:06 AM

Dengan perkembangan media sosial yang berterusan, Xiaohongshu telah menjadi platform untuk lebih ramai golongan muda berkongsi kehidupan mereka dan menemui perkara yang indah. Ramai pengguna bermasalah dengan isu autosimpan semasa menyiarkan imej. Jadi, bagaimana untuk menyelesaikan masalah ini? 1. Bagaimana untuk menyelesaikan masalah menyimpan gambar secara automatik semasa menerbitkan di Xiaohongshu? 1. Kosongkan cache Pertama, kita boleh cuba mengosongkan data cache Xiaohongshu. Langkah-langkahnya adalah seperti berikut: (1) Buka Xiaohongshu dan klik butang "Saya" di sudut kanan bawah (2) Pada halaman tengah peribadi, cari "Tetapan" dan klik padanya (3) Tatal ke bawah dan cari "; Kosongkan Cache". Klik OK. Selepas mengosongkan cache, masukkan semula Xiaohongshu dan cuba siarkan gambar untuk melihat sama ada masalah penjimatan automatik telah diselesaikan. 2. Kemas kini versi Xiaohongshu untuk memastikan bahawa Xiaohongshu anda

Bagaimana untuk menyiarkan gambar dalam ulasan TikTok? Di manakah pintu masuk ke gambar di ruang komen? Bagaimana untuk menyiarkan gambar dalam ulasan TikTok? Di manakah pintu masuk ke gambar di ruang komen? Mar 21, 2024 pm 09:12 PM

Dengan populariti video pendek Douyin, interaksi pengguna di kawasan komen menjadi lebih berwarna. Sesetengah pengguna ingin berkongsi imej dalam ulasan untuk meluahkan pendapat atau emosi mereka dengan lebih baik. Jadi, bagaimana untuk menyiarkan gambar dalam ulasan TikTok? Artikel ini akan menjawab soalan ini secara terperinci untuk anda dan memberikan anda beberapa petua dan langkah berjaga-jaga yang berkaitan. 1. Bagaimana untuk menyiarkan gambar dalam komen Douyin? 1. Buka Douyin: Pertama, anda perlu membuka APP Douyin dan log masuk ke akaun anda. 2. Cari kawasan ulasan: Apabila menyemak imbas atau menyiarkan video pendek, cari tempat yang anda mahu mengulas dan klik butang "Ulasan". 3. Masukkan kandungan ulasan anda: Masukkan kandungan ulasan anda dalam ruangan komen. 4. Pilih untuk menghantar gambar: Dalam antara muka untuk memasukkan kandungan ulasan, anda akan melihat butang "gambar" atau butang "+", klik

6 Cara Menjadikan Gambar Lebih Tajam pada iPhone 6 Cara Menjadikan Gambar Lebih Tajam pada iPhone Mar 04, 2024 pm 06:25 PM

iPhone terbaru Apple menangkap kenangan dengan perincian, ketepuan dan kecerahan yang jelas. Tetapi kadangkala, anda mungkin menghadapi beberapa isu yang boleh menyebabkan imej kelihatan kurang jelas. Walaupun autofokus pada kamera iPhone telah berjalan jauh dan membolehkan anda mengambil foto dengan cepat, kamera boleh tersalah fokus pada subjek yang salah dalam situasi tertentu, menjadikan foto kabur di kawasan yang tidak diingini. Jika foto anda pada iPhone anda kelihatan tidak fokus atau kurang ketajaman secara keseluruhan, siaran berikut akan membantu anda menjadikannya lebih tajam. Cara Menjadikan Gambar Lebih Jelas pada iPhone [6 Kaedah] Anda boleh cuba menggunakan apl Foto asli untuk membersihkan foto anda. Jika anda mahukan lebih banyak ciri dan pilihan

Cara membuat gambar ppt muncul satu persatu Cara membuat gambar ppt muncul satu persatu Mar 25, 2024 pm 04:00 PM

Dalam PowerPoint, ia adalah teknik biasa untuk memaparkan gambar satu demi satu, yang boleh dicapai dengan menetapkan kesan animasi. Panduan ini memperincikan langkah untuk melaksanakan teknik ini, termasuk persediaan asas, sisipan imej, menambah animasi dan melaraskan susunan dan masa animasi. Selain itu, tetapan dan pelarasan lanjutan disediakan, seperti menggunakan pencetus, melaraskan kelajuan dan susunan animasi, dan pratonton kesan animasi. Dengan mengikuti langkah dan petua ini, pengguna boleh dengan mudah menyediakan gambar untuk muncul satu demi satu dalam PowerPoint, dengan itu meningkatkan kesan visual persembahan dan menarik perhatian penonton.

Bagaimana untuk menyelesaikan masalah garis hitam bar tugas telus win11 Bagaimana untuk menyelesaikan masalah garis hitam bar tugas telus win11 Dec 22, 2023 pm 10:04 PM

Selepas ramai rakan menggunakan translucenttb untuk menyediakan bar tugas telus, mereka mendapati bahawa terdapat garis hitam dalam bar tugas telus win11, yang kelihatan sangat tidak selesa. Bagaimana saya harus menyelesaikannya pada masa ini? . Terdapat garis hitam dalam bar tugas telus win11: Kaedah 1: 1. Menurut maklum balas pengguna, anda boleh klik kanan translucenttb dan buka tetapan. 2. Kemudian tetapkan "margin" pilihan ikon kepada "1" untuk menyelesaikan masalah. Kaedah 2: 1. Jika ia masih tidak berfungsi, anda boleh klik kanan ruang kosong untuk membuka "Peribadikan" 2. Kemudian pilih tema lalai sistem untuk menukarnya. Kaedah ketiga: 1. Jika semuanya gagal, anda disyorkan supaya menyahpasang translucenttb. 2. Kemudian ganti

Bagaimana untuk menukar dokumen pdf ke dalam imej jpg dengan Foxit PDF Reader - Bagaimana untuk menukar dokumen pdf ke dalam imej jpg dengan Foxit PDF Reader Bagaimana untuk menukar dokumen pdf ke dalam imej jpg dengan Foxit PDF Reader - Bagaimana untuk menukar dokumen pdf ke dalam imej jpg dengan Foxit PDF Reader Mar 04, 2024 pm 05:49 PM

Adakah anda juga menggunakan perisian Foxit PDF Reader? Jadi adakah anda tahu bagaimana Foxit PDF Reader menukar dokumen pdf kepada imej jpg Artikel berikut membawa anda bagaimana Foxit PDF Reader menukar dokumen pdf kepada imej jpg imej jpg, sila datang dan lihat di bawah. Mula-mula mulakan Pembaca PDF Foxit, kemudian cari "Ciri" pada bar alat atas, dan kemudian pilih fungsi "PDF kepada Orang Lain". Seterusnya, buka halaman web yang dipanggil "Foxit PDF Online Conversion". Klik butang "Log Masuk" di bahagian atas sebelah kanan halaman untuk log masuk, dan kemudian hidupkan fungsi "PDF ke Imej". Kemudian klik butang muat naik dan tambah fail pdf yang anda ingin tukar kepada imej Selepas menambahnya, klik "Mulakan Penukaran".

Bagaimana untuk menggunakan JavaScript untuk melaksanakan fungsi seret dan zum imej? Bagaimana untuk menggunakan JavaScript untuk melaksanakan fungsi seret dan zum imej? Oct 27, 2023 am 09:39 AM

Bagaimana untuk menggunakan JavaScript untuk melaksanakan fungsi seret dan zum imej? Dalam pembangunan web moden, menyeret dan mengezum imej adalah keperluan biasa. Dengan menggunakan JavaScript, kami boleh menambahkan fungsi seret dan zum pada imej dengan mudah untuk memberikan pengalaman pengguna yang lebih baik. Dalam artikel ini, kami akan memperkenalkan cara menggunakan JavaScript untuk melaksanakan fungsi ini, dengan contoh kod khusus. Struktur HTML Pertama, kita memerlukan struktur HTML asas untuk memaparkan gambar dan menambah

Cara menggunakan HTML, CSS dan jQuery untuk melaksanakan fungsi lanjutan penggabungan dan paparan imej Cara menggunakan HTML, CSS dan jQuery untuk melaksanakan fungsi lanjutan penggabungan dan paparan imej Oct 27, 2023 pm 04:36 PM

Gambaran keseluruhan fungsi lanjutan tentang cara menggunakan HTML, CSS dan jQuery untuk melaksanakan paparan gabungan imej: Dalam reka bentuk web, paparan imej ialah pautan penting, dan paparan gabungan imej ialah salah satu teknik biasa untuk meningkatkan kelajuan memuatkan halaman dan pengalaman pengguna. Artikel ini akan memperkenalkan cara menggunakan HTML, CSS dan jQuery untuk melaksanakan fungsi lanjutan penggabungan dan paparan imej, dan menyediakan contoh kod khusus. 1. Reka letak HTML: Pertama, kita perlu mencipta bekas dalam HTML untuk memaparkan imej yang digabungkan. Anda boleh menggunakan di

See all articles