我到处搜索,找到解决问题的可能方法。不幸的是,我似乎无法弄明白。我有一个.php文件,可以根据其他图像创建图像。我让脚本完全正常工作,之前没有任何缺陷。但是在摆弄了一些其他文件后,它突然停止工作,现在在Firefox,Chrome和IE上生成了腐败的.png图像。
image.php
<?php
ini_set("display_errors", 1);
ini_set("error_reporting", 2047);
ini_set("display_errors", 1);
ini_set("display_startup_errors", 1);
error_reporting("E_ALL");
include("GameEngine/Database.php");
if(isset($_GET['uid'])){
$uid = $_GET['uid'];
} else {
$uid = "1";
}
if(isset($_GET['size'])){
if($_GET['size']=='profile'){
$size = '31x40';
}elseif($_GET['size']=='inventory'){
$size = '64x82';
}elseif($_GET['size']=='sideinfo'){
$size = '119x136';
}
} else {
$size = "119x136";
}
$herodetail = $database->HeroFace($uid);
if($herodetail['color']==0){
$color = "black";
}
if($herodetail['color']==1){
$color = "brown";
}
if($herodetail['color']==2){
$color = "darkbrown";
}
if($herodetail['color']==3){
$color = "yellow";
}
if($herodetail['color']==4){
$color = "red";
}
$geteye = $herodetail['eye'];
$geteyebrow = $herodetail['eyebrow'];
$getnose = $herodetail['nose'];
$getear = $herodetail['ear'];
$getmouth = $herodetail['mouth'];
$getbeard = $herodetail['beard'];
$gethair = $herodetail['hair'];
$getface = $herodetail['face'];
// USAGE EXAMPLE:
$body = imagecreatefrompng('img/hero/head/'.$size.'/face0.png');
if($getbeard!=5){
$beard = imagecreatefrompng('img/hero/head/'.$size.'/beard/beard'.$getbeard.'-'.$color.'.png');
}
$ear = imagecreatefrompng('img/hero/head/'.$size.'/ear/ear'.$getear.'.png');
$eye = imagecreatefrompng('img/hero/head/'.$size.'/eye/eye'.$geteye.'.png');
$eyebrow = imagecreatefrompng('img/hero/head/'.$size.'/eyebrow/eyebrow'.$geteyebrow.'-'.$color.'.png');
if($gethair!=5){
$hair = imagecreatefrompng('img/hero/head/'.$size.'/hair/hair'.$gethair.'-'.$color.'.png');
}
$mouth = imagecreatefrompng('img/hero/head/'.$size.'/mouth/mouth'.$getmouth.'.png');
$nose = imagecreatefrompng('img/hero/head/'.$size.'/nose/nose'.$getnose.'.png');
$face = imagecreatefrompng('img/hero/head/'.$size.'/face/face'.$getface.'.png');
// SAME COMMANDS:
$database->imagecopymerge_alpha($body, $face, 0, 0, 0, 0, imagesx($face), imagesy($face),100);
$database->imagecopymerge_alpha($body, $ear, 0, 0, 0, 0, imagesx($ear), imagesy($ear),100);
$database->imagecopymerge_alpha($body, $eye, 0, 0, 0, 0, imagesx($eye), imagesy($eye),100);
$database->imagecopymerge_alpha($body, $eyebrow, 0, 0, 0, 0, imagesx($eyebrow), imagesy($eyebrow),100);
if($gethair!=5){
$database->imagecopymerge_alpha($body, $hair, 0, 0, 0, 0, imagesx($hair), imagesy($hair),100);
}
$database->imagecopymerge_alpha($body, $mouth, 0, 0, 0, 0, imagesx($mouth), imagesy($mouth),100);
$database->imagecopymerge_alpha($body, $nose, 0, 0, 0, 0, imagesx($nose), imagesy($nose),100);
if($getbeard!=5){
$database->imagecopymerge_alpha($body, $beard, 0, 0, 0, 0, imagesx($beard), imagesy($beard),100);
}
// OUTPUT IMAGE:
header("Content-Type: image/png");
imagesavealpha($body, true);
imagepng($body, NULL);
?>
我试过注释掉header(),以便在渲染图像之前检查任何PHP中是否有错误。不是这种情况。我已经尝试了标签中的所有$变量来检查这些变量是否正确呈现。他们做到了。我不知道问题可能是什么。
我现在唯一的猜测是有一个空格或回车符,它会以某种方式被添加到最终渲染中,导致它损坏。但是,我已经搜索了这个可能的空白年龄,似乎无法找到它。
非常感谢任何提示和/或建议!
解决 此脚本包含的其中一个文件已保存为带有BOM的UTF-8。这给图像增加了一个字节,使其损坏。将所有文件保存为UTF-8而不使用BOM修复了我的问题。
答案 0 :(得分:0)
我看不到问题(除非有一些错误报告正在进行?),但是如果将图像从浏览器保存到文件然后在文本编辑器中打开它,则问题可能很明显。
编辑:结果是utf-8文件中的字节顺序标记。
答案 1 :(得分:0)
刚刚发生搜索,发现:https://github.com/yi12345/TravianT4/blob/master/hero_image.php 100%相同...确定你没有弄乱Database.php中的东西?