PHP图片上传:透明度显示为黑色
PHP image upload: Transparency showing up as a black
我对PHP非常陌生,我真的不知道如何修复一个常见的错误。当我使用以下代码上传png时,背景显示为黑色。有一些解决方案显示如何修复它,但我不知道把它放在代码的哪里,我发现的一切都打破了它。我使用以下代码:
<?php
############ Configuration ##############
$destination_folder = '../img/'; //upload directory ends with / (slash)
##########################################
//continue only if $_POST is set and it is a Ajax request
if(isset($_POST) && isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){
$whichimage = $_POST["whichimage"];
// check $_FILES['ImageFile'] not empty
if(!isset($_FILES['image_file']) || !is_uploaded_file($_FILES['image_file']['tmp_name'])){
die('Image file is Missing!'); // output error when above checks fail.
}
//uploaded file info we need to proceed
$image_name = $_FILES['image_file']['name']; //file name
$image_temp = $_FILES['image_file']['tmp_name']; //file temp
$image_size_info = getimagesize($image_temp); //get image size
if($image_size_info){
$image_type = $image_size_info['mime']; //image type
}else{
die("Make sure image file is valid!");
}
//switch statement below checks allowed image type
//as well as creates new image from given file
switch($image_type){
case 'image/png':
$image_res = imagecreatefrompng($image_temp); break;
case 'image/gif':
$image_res = imagecreatefromgif($image_temp); break;
case 'image/jpeg': case 'image/pjpeg':
$image_res = imagecreatefromjpeg($image_temp); break;
default:
$image_res = false;
}
if($image_res){
//Get file extension and name to construct new file name
$image_info = pathinfo($image_name);
$image_extension = strtolower($image_info["extension"]); //image extension
$image_name_only = strtolower($image_info["filename"]);//file name only, no extension
//create a name for new image (Eg: fileName_293749.jpg) ;
$new_file_name = $whichimage . '.' . $image_extension;
//folder path to save resized images and thumbnails
$image_save_folder = $destination_folder . $new_file_name;
//call normal_resize_image() function to proportionally resize image
if(normal_resize_image($image_res, $image_save_folder, $image_type))
{
}
imagedestroy($image_res); //freeup memory
}
}
##### This function will proportionally resize image #####
function normal_resize_image($source, $destination, $image_type){
//do not resize if image is smaller than max size
if(save_image($source, $destination, $image_type)){
return true;
}
}
##### Saves image resource to file #####
function save_image($source, $destination, $image_type){
switch(strtolower($image_type)){//determine mime type
case 'image/png':
imagepng($source, $destination); return true; //save png file
break;
case 'image/gif':
imagegif($source, $destination); return true; //save gif file
break;
case 'image/jpeg': case 'image/pjpeg':
imagejpeg($source, $destination); return true; //save jpeg file
break;
default: return false;
}
}
这是本教程的修改和精简版本
我不想重新调整图像的大小和改变质量,所以我尝试删除这些部分的代码。
在教程的评论部分,虽然有一些关于修复透明度的帖子:
imagealphablending($NewCanves, false);
imagesavealpha($NewCanves,true);
$transparent = imagecolorallocatealpha($NewCanves, 255, 255, 255, 127);
imagefilledrectangle($NewCanves, 0, 0, $NewWidth, $NewHeight, $transparent);
但问题是这些片段会进入被删除的图像大小调整部分。
我如何正确地修复透明度问题与我修改的代码?感谢您的阅读和帮助一个PHP新手。
我休息了一下,觉得自己很笨,才想出了这个办法!再次感谢Marc B的想法。我采用的解决方案如下:
添加以下行:
imagealphablending($image_res, false);
imagesavealpha($image_res, true);
到这部分代码:
//switch statement below checks allowed image type
//as well as creates new image from given file
switch($image_type){
case 'image/png':
$image_res = imagecreatefrompng($image_temp); imagealphablending($image_res, false);
imagesavealpha($image_res, true); break;
case 'image/gif':
$image_res = imagecreatefromgif($image_temp); break;
case 'image/jpeg': case 'image/pjpeg':
$image_res = imagecreatefromjpeg($image_temp); break;
default:
$image_res = false;
}
相关文章:
- 从桌面读取python文件时高亮显示代码
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何在生成下载文件时显示加载动画
- React重新渲染但未显示正确的组件
- nodejs-expressjs上传图像并显示它们
- 使用JSP从服务器检索和显示图像
- 音频控件在mouseover上显示,在mouseout上淡出
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 显示5秒后隐藏潜水
- jQuery淡入淡出/动画不透明度到不同的显示类型,然后阻止
- 更改 JWPlayer 显示图标(播放按钮)的不透明度
- 使用CSS动画更改显示和不透明度
- Jquery Slider UI,用于在基于不透明度的OpenLayers中显示覆盖层
- 当选择元素上方的元素(不透明度:0.001)时,元素后面的 rails/css/突出显示文本
- 制作不透明度隐藏/显示动画
- 显示块与不透明度
- PHP图片上传:透明度显示为黑色
- 单击缩略图并提供不透明度时,显示大尺寸图像
- 可见性:隐藏与显示:无与不透明度:0