2009-07-06 3 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 src="/thumbnail.php?pk=1234567" /> 

그런 다음 이미지 (이미지)와 적절한 헤더를 출력하기 위해 thumbnail.php를 구현합니다. 예컨대 : 코드에

<?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()로 만든 이미지를 항상 파괴하면 시간이 지남에 따라 메모리가 부족해질 수 있습니다 (웹 서버를 다시 시작해야 함).