目次
ディスカッションへの返信 (解決策)
ホームページ バックエンド開発 PHPチュートリアル アップロードされた画像に透明なチャネルが含まれていると画像が黒くなるのはなぜですか?

アップロードされた画像に透明なチャネルが含まれていると画像が黒くなるのはなぜですか?

Jun 23, 2016 pm 01:58 PM
アップロード 写真 透明

追記 変更された画像アップロード クラスの元のアドレス: 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;    }}
ログイン後にコピー


ディスカッションへの返信 (解決策)

アップロードは変更されませんここに写真を投稿できます
GD2 のサムネイルは、imagecreatetruecolor、imagecopyresampled にする必要があります
透明な色がある場合は、imagecolortransparent

見るために写真を投稿します

見るために写真を投稿します





1 透明なチャンネルを備えた通常の写真...


写真を投稿してご覧ください





透明なチャンネルを備えた通常の写真です...
通話をどうやってアップロードしましたか?写真をアップロードするのは問題ありません

imagecreate と imagecreatetruecolor で生成された写真はすべて黒です (注: 透明ではありません)
写真は透明なので、背景が自然に表示されます
つまり、写真が配置されています黒い背景に
したがって、ズームされた画像は透明な色に設定する必要があります

私はそれを自分で解決しました。 。とにかくありがとう、だから事前にimagefillで埋めなかったのです

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

小紅書で公開するときに写真が自動的に保存される問題を解決するにはどうすればよいですか?投稿時に自動保存された画像はどこにありますか? 小紅書で公開するときに写真が自動的に保存される問題を解決するにはどうすればよいですか?投稿時に自動保存された画像はどこにありますか? Mar 22, 2024 am 08:06 AM

ソーシャルメディアの継続的な発展に伴い、Xiaohongshu はますます多くの若者が自分たちの生活を共有し、美しいものを発見するためのプラットフォームとなっています。多くのユーザーは、画像を投稿する際の自動保存の問題に悩まされています。では、この問題をどうやって解決すればよいでしょうか? 1.小紅書で公開するときに写真が自動的に保存される問題を解決するにはどうすればよいですか? 1. キャッシュをクリアする まず、Xiaohongshu のキャッシュ データをクリアしてみます。手順は次のとおりです: (1) 小紅書を開いて右下隅の「マイ」ボタンをクリックします。 (2) 個人センター ページで「設定」を見つけてクリックします。 (3) 下にスクロールして「」を見つけます。 「キャッシュをクリア」オプションを選択し、「OK」をクリックします。キャッシュをクリアした後、Xiaohongshu を再起動し、写真を投稿して、自動保存の問題が解決されるかどうかを確認します。 2. 小紅書バージョンを更新して、小紅書が正しく動作することを確認します。

TikTokのコメントに写真を投稿するにはどうすればよいですか?コメント欄の写真への入り口はどこですか? TikTokのコメントに写真を投稿するにはどうすればよいですか?コメント欄の写真への入り口はどこですか? Mar 21, 2024 pm 09:12 PM

Douyin のショートビデオの人気により、コメント エリアでのユーザーのやり取りがより多彩になりました。ユーザーの中には、自分の意見や感情をよりよく表現するために、コメントで画像を共有したいと考えている人もいます。では、TikTokのコメントに写真を投稿するにはどうすればよいでしょうか?この記事では、この質問に詳しく答え、関連するヒントと注意事項をいくつか紹介します。 1.Douyinのコメントに写真を投稿するにはどうすればよいですか? 1. Douyinを開く: まず、Douyin APPを開いてアカウントにログインする必要があります。 2. コメントエリアを見つける:短いビデオを閲覧または投稿するときに、コメントしたい場所を見つけて「コメント」ボタンをクリックします。 3. コメントの内容を入力します: コメント領域にコメントの内容を入力します。 4. 写真の送信を選択します。コメント内容を入力するインターフェースに「写真」ボタンまたは「+」ボタンが表示されます。

iPhone で写真をより鮮明にする 6 つの方法 iPhone で写真をより鮮明にする 6 つの方法 Mar 04, 2024 pm 06:25 PM

Apple の最近の iPhone は、鮮明なディテール、彩度、明るさで思い出を捉えます。ただし、場合によっては、画像が鮮明に見えなくなる問題が発生することがあります。 iPhone カメラのオートフォーカスは大きく進歩し、写真をすばやく撮影できるようになりましたが、状況によってはカメラが誤って間違った被写体に焦点を合わせ、不要な領域で写真がぼやけてしまうことがあります。 iPhone 上の写真の焦点が合っていない場合、または全体的に鮮明さが欠けている場合は、次の投稿を参照して写真を鮮明にすることができます。 iPhone で写真を鮮明にする方法 [6 つの方法] ネイティブの写真アプリを使用して写真をクリーンアップしてみることができます。さらに多くの機能やオプションが必要な場合

PPT画像を1枚ずつ表示させる方法 PPT画像を1枚ずつ表示させる方法 Mar 25, 2024 pm 04:00 PM

PowerPoint では、画像を 1 枚ずつ表示するのが一般的な手法ですが、これはアニメーション効果を設定することで実現できます。このガイドでは、基本的なセットアップ、画像の挿入、アニメーションの追加、アニメーションの順序とタイミングの調整など、この手法を実装する手順について詳しく説明します。さらに、トリガーの使用、アニメーションの速度と順序の調整、アニメーション効果のプレビューなど、高度な設定と調整が提供されます。これらの手順とヒントに従うことで、ユーザーは PowerPoint で次々に表示される画像を簡単に設定できるため、プレゼンテーションの視覚的な効果が高まり、聴衆の注意を引くことができます。

win11の透明タスクバーの黒い線の問題を解決する方法 win11の透明タスクバーの黒い線の問題を解決する方法 Dec 22, 2023 pm 10:04 PM

多くの友人がtranslucenttbを使用して透明なタスクバーを設定した後、Win11の透明なタスクバーに黒い線があり、非常に不快に見えることに気づきました。このとき、どのように解決すればよいですか?実際には、ソフトウェアで解決できます。 。 Win11 の透明なタスクバーに黒い線があります: 方法 1: 1. ユーザーのフィードバックによると、translucenttb を右クリックして設定を開くことができます。 2. 次に、アイコンオプションの「マージン」を「1」に設定して問題を解決します。方法 2: 1. それでも機能しない場合は、空白スペースを右クリックして「個人用設定」を開きます。 2. 次に、システムのデフォルトのテーマを選択して変更します。方法 3: 1. すべてが失敗した場合は、translucenttb をアンインストールすることをお勧めします。 2.その後交換します

Foxit PDF Reader で PDF ドキュメントを jpg 画像に変換する方法 - Foxit PDF Reader で PDF ドキュメントを jpg 画像に変換する方法 Foxit PDF Reader で PDF ドキュメントを jpg 画像に変換する方法 - Foxit PDF Reader で PDF ドキュメントを jpg 画像に変換する方法 Mar 04, 2024 pm 05:49 PM

Foxit PDF Reader ソフトウェアも使用していますか? Foxit PDF Reader が PDF ドキュメントを jpg 画像に変換する方法をご存知ですか? 次の記事では、Foxit PDF Reader が PDF ドキュメントを jpg 画像に変換する方法について説明します。 jpg画像は以下からご覧ください。まずFoxit PDF Readerを起動し、上部のツールバーで「機能」を見つけ、「PDF to Others」機能を選択します。次に、「Foxit PDF Online Conversion」というWebページを開きます。ページ右上の「ログイン」ボタンをクリックしてログインし、「PDF to Image」機能をオンにしてください。次にアップロードボタンをクリックし、画像に変換したいPDFファイルを追加し、追加後「変換開始」をクリックします。

JavaScript を使用して画像のドラッグとズーム機能を実装するにはどうすればよいですか? JavaScript を使用して画像のドラッグとズーム機能を実装するにはどうすればよいですか? Oct 27, 2023 am 09:39 AM

JavaScript を使用して画像のドラッグとズーム機能を実装するにはどうすればよいですか?最新の Web 開発では、画像のドラッグとズームは一般的な要件です。 JavaScript を使用すると、画像にドラッグやズーム機能を簡単に追加して、より良いユーザー エクスペリエンスを提供できます。この記事では、JavaScriptを使用してこの機能を実装する方法を、具体的なコード例とともに紹介します。 HTML 構造 まず、画像を表示したり追加したりするための基本的な HTML 構造が必要です。

HTML、CSS、jQuery を使用して画像の結合と表示の高度な機能を実装する方法 HTML、CSS、jQuery を使用して画像の結合と表示の高度な機能を実装する方法 Oct 27, 2023 pm 04:36 PM

HTML、CSS、jQuery を使用して画像結合表示を実装する方法の高度な機能の概要: Web デザインにおいて、画像表示は重要なリンクであり、画像結合表示はページの読み込み速度を向上させ、ユーザー エクスペリエンスを向上させるための一般的な手法の 1 つです。この記事では、HTML、CSS、jQuery を使用して画像の結合と表示の高度な機能を実装する方法と、具体的なコード例を紹介します。 1. HTML レイアウト: まず、結合された画像を表示するコンテナを HTML で作成する必要があります。ディを使用できます

See all articles