3

問題の可能な解決策を見つけるために、あらゆる場所を検索しました。残念ながら、私はそれを理解できないようです。他の画像に基づいて画像を作成する .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);
?>

画像がレンダリングされる前に、PHP にエラーがあるかどうかを確認できるように、header() をコメントアウトしようとしました。これはそうではありません。タグ内のすべての $variables を試して、これらが正しくレンダリングされているかどうかを確認しました。彼らがやった。何が問題なのか途方に暮れています。

私の唯一の推測は、最終的なレンダリングに何らかの形で追加されて破損する空白または改行があることです。しかし、私はこの可能性のある空白を何年も探してきましたが、見つけられないようです。

ヒントや提案は大歓迎です!

解決済み このスクリプトに含まれていたファイルの 1 つが、BOM 付きの UTF-8 として保存されていました。これにより、画像に余分なバイトが与えられ、画像が破損していました。BOMなしですべてのファイルをUTF-8として保存すると、問題が解決しました。

4

2 に答える 2

0

たまたま検索して見つけた : https://github.com/yi12345/TravianT4/blob/master/hero_image.phpこれは 100% 同じです... Database.php で何かを台無しにしていませんか?

于 2012-11-21T14:03:07.170 に答える
0

問題はわかりませんが (何らかのエラー報告が行われている場合を除きますか?)、画像をブラウザからファイルに保存してからテキスト エディタで開くと、問題が明らかになる場合があります。

編集:utf-8ファイルのバイトオーダーマークであることが判明しました。

于 2012-11-21T13:45:05.073 に答える