2009-07-06 45 views
0

我正在嘗試爲特定項目生成圖像報告。每件商品都有一個唯一的商品編號,它存儲在變量$ pk中。顯示來自不同來源的圖像

在此,調用images/$ pk.jpg和/或screenshots/$ pk.jpg會顯示當前項目頁面的相關圖片或屏幕截圖。這在實際頁面中正常工作,但不在彈出報告中。

對於一個文件,我希望在輸出前將其修剪爲800px,而不存儲結果文件。

此外,人們可以上傳文件,所以我試圖檢索上傳的所有文件列表,以png結尾,並將其中的每一個輸出到瀏覽器。

下面是我的代碼,但只有html頭被輸出。

我在做什麼錯?這是一種濫用imagepng方法嗎?

我的代碼:

<?php 
if (isset($_GET["pk"])) { 
    $pk = $_GET["pk"]; 
} 
$con = mysqli_connect("localhost","user","pass", "db"); 
if (!$con) { 
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error(); 
    exit; 
} { 
    echo "<h1>Image report for auction number: ".$pk. "</h1> \n"; 
    $srcName = 'screenshots/'.$pk.'.png'; 
    $info = getimageinfo($srcName); 
    $src = imagecreatefrompng($srcName); 
    $dest = imagecreate($info[0], min($info[1], 800)); 
    imagecopy($dest, $src, 0, 0, 0, 0, $info[0], min($info[1], 800)); 
    imagepng($dest); 
    imagepng('images/'.$pk.'.png'); 
    $filesQuery = "SELECT FILENAME FROM FILES WHERE FILENAME LIKE %png%"; 
    if ($getFiles = $con->prepare($filesQuery)) { 
     $getFiles->execute(); 
     $getFiles->bind_result($FILENAME); 
     $files = array(); 
     while ($getFiles->fetch()) { 
      $filename = array(
        'FILENAME' => $FILENAME, 
        ); 
      $files[] = $filename; 
     } 
    } 
    $filesList = ''; 
    foreach ($files as $filenames) { 
     $imagepng($filenames['FILENAME']); 
    } 
    ; 
} 

回答

1

您不能混用HTML和PNG輸出(即:嵌入HTML裏面PNG),你正在嘗試做的。你需要將這個腳本分成兩部分。

第一部分(例如report.php)輸出所有圖像的列表以及img標籤。例如:

<img src="/thumbnail.php?pk=1234567" /> 

然後,您將實現thumbnail.php以輸出圖像(以及圖像)以及相應的標題。 E.g:

<?php 
$srcName = 'screenshots/'.$_GET['pk'].'.png'; 
$info = getimageinfo($srcName); 
$src = imagecreatefrompng($srcName); 
$dest = imagecreate($info[0], min($info[1], 800)); 
imagecopy($dest, $src, 0, 0, 0, 0, $info[0], min($info[1], 800)); 

header('Content-type: image/png'); 
imagepng($dest); 
imagedestroy($src); 
imagedestroy($dest); 
?> 

兩個在你的代碼備註:

  1. imagepng()接受的圖像資源,因爲它是第一個參數(一個資源,與imagecreatefrompng或imagecreate創建)。它不需要文件名,因爲它是第一個參數。
  2. 始終銷燬您使用imagedestroy()創建的圖像,或者隨着時間的推移內存不足(需要重新啓動Web服務器)。