2014-06-30 2 views
0

PHP에서 imagecopymerge 함수로 뭔가 이상한 일이 일어나고 있습니다. 이 두 PNG 파일을 다른 페이지의 맨 위에 병합하려고합니다. 병합 될 위치는 html 페이지의 드래그 가능한 캔버스에서 동적으로 가져옵니다. 게시 양식을 통해 'x'와 'y'좌표를 제출하여 대상 이미지의 병합 (PHP 사용자에 따라 $dst_x$dst_y 매개 변수)을 내 PHP 파일에 병합합니다.PHP는 imagecopymerge()로 두 개의 이미지를 병합합니다.

함수의 실제 호출에서이 두 매개 변수를 동적으로 설정하려고하면 결과 이미지가 브라우저로 제대로 덤프되지만 저장된 이미지를 마우스 오른쪽 단추로 클릭하면 ... 소스 (병합) 이미지 ($src_img)는 (0,0) 좌표로 시작하고 지정한 것 (또는 오히려 사용자)이 아닙니다. 전체 웹 페이지 (Ctrl + S 또는 파일 ... 저장)로 저장하려고하면 올바르게 저장됩니다 (즉 $src_image은 지정된 xy 좌표로 시작 함).

그러나 x 좌표와 y 좌표를 하드 코딩하면 발생하지 않으며 모든 방법 (데스크톱, 파일, 끌어서 놓기 ... 저장 ... 등)을 통해 저장할 수 있습니다.) 브라우저에 표시되고 정확하고 일관되게 저장됩니다. 나는 파이어 폭스가이 일을 왜 모르겠어요

<?php 
if(isset($_POST)){ 

    // Create image instances 
    $src = imagecreatefrompng('hello.png'); 
    $dest = imagecreatefrompng('./img/image2.png'); 
    imagealphablending($dest, true); 
    imagesavealpha($dest, true); 

    // Copy and merge 
    $posX = (int)(isset($_POST['x']) ? $_POST['x'] : null); 
    $posY = (int)(isset($_POST['y']) ? $_POST['y'] : null); 

    imagecopymerge($dest, $src, $posX, $posY, 0, 0, 200, 200, 100); //dynamic setting 

    header("Content-Disposition: inline; filename=\"rendered.png\""); 
    header('Content-Type: image/png'); 

    // Output and free from memory 

    imagepng($dest); 
    imagedestroy($src); 
    imagedestroy($dest); 
} 
?> 

하지만 난 어떤 도움을 주셔서 감사합니다 :

내 코드입니다.

답변

0

같은 문제가있는 사람은 HTML 양식의 submit 메소드를 변경하여이 문제를 해결했습니다. 게시물 대신, 나는 그것을 사용하고 효과가있었습니다. 그것이 왜했는지, 또는 왜 실제 가치에 차이가 나는지에 대해서는 확신 할 수 없지만, 효과가있었습니다.

UPDATE : 정말 문제를 일으키는 무슨

체격. From the PHP.net in the imagepng() function man : 동적 포스트 데이터를 기반으로 이미지를 생성하고 사람이 저장하려고 할 때 같은 문제가 발생할 수 있습니다 표시 할 전송, 서버에 저장하지 않으려면

의 브라우저가 서버에서 다시 요청합니다 (모든 게시물 데이터 손실 및 손상된 PNG 발생).

이 주위에 얻을 수있는 가장 쉬운 방법은 예를 들어, 콘텐츠 처리 헤더를 사용하여 다운로드를 강제하는 것입니다 :

<?php 
    header('Content-Disposition: Attachment;filename=image.png'); 
    header('Content-type: image/png'); 
?> 
관련 문제