2010-06-05 4 views
0

내가 인터넷을 부끄러움없이 몰아 치는이 함수 cropit은 기존 이미지에서 90x60 영역을 잘라냅니다.PHP - 어떻게 고유 한 변수 이름을 보호합니까?

이 코드에서는 하나 이상의 항목 (이미지)에 대해이 기능을 사용할 때 다른 기능 (동일한 출력 공간을 차지하도록)이 표시됩니다.

나는이 함수가 생성 될 때 이미지의 목적지 (imagecopy)와 동일한 (정적 인) 이름 ($ dest)을 가지고 있기 때문이라고 생각한다.

$ dest 변수의 "이름"역할을하는 cropit 함수의 두 번째 인수를 포함하고 있지만 작동하지 않았습니다.

전체 공개의 목적으로 나는 22 시간의 PHP 경험을 가지고 있습니다. (마지막으로 잠을 잤던 이래로 동일한 시간 수를 보냈습니다) 나는 그다지 똑똑하지 않습니다.

여기에 완전히 다른 것이 있어도 일반적으로 변수에 항상 고유 한 이름이 지정되도록하는 방법을 사용하는 것이 유용 할 것입니다.

<?php 

function cropit($srcimg, $dest) { 
$im = imagecreatefromjpeg($srcimg); 
$img_width = imagesx($im); 
$img_height = imagesy($im); 

$width = 90; 
$height = 60; 
$tlx = floor($img_width/2) - floor ($width/2); 
$tly = floor($img_height/2) - floor ($height/2); 

if ($tlx < 0) 
{ 
$tlx = 0; 
} 
if ($tly < 0) 
{ 
$tly = 0; 
} 
if (($img_width - $tlx) < $width) 
{ 
$width = $img_width - $tlx; 
} 
if (($img_height - $tly) < $height) 
{ 
$height = $img_height - $tly; 
} 
$dest = imagecreatetruecolor ($width, $height); 
imagecopy($dest, $im, 0, 0, $tlx, $tly, $width, $height); 
imagejpeg($dest); 
imagedestroy($dest); 
} 

$img = "imagefolder\imageone.jpg"; 
$img2 = "imagefolder\imagetwo.jpg"; 

cropit($img, $i1); 
cropit($img2, $i2); 
?> 
+2

HAHAHAHAHA, 재미있는 설명을 참조하십시오 :)하지만 정확히 당신의 문제? 어떤 이름을 고유하게 만들 필요가 있습니까? –

+1

Mmh 코드를 사용하여 더 많은 이미지를 잘라내야합니다. * 하나는 다른 하나 위에 표시됩니다. * 두 개의 다른 이미지가 하나에 포함되어 있습니까? Btw. 두 번째 매개 변수는 아무 것도하지 않고 아무 쓸모가 없습니다 ('$ i '에 대한 값을 정의조차하지 않습니다.) –

답변

0

나는 당신을 이해하기를 바랍니다. 자른 이미지를 변수 $i1$i2에있는 파일 이름으로 저장 하시겠습니까?

그러면 마지막 부분이 잘못되었을 수 있습니다. 그것은이 같아야 :

<?php 
function cropit($srcimg, $filename) { 
$im = imagecreatefromjpeg($srcimg); 
$img_width = imagesx($im); 
$img_height = imagesy($im); 

$width = 90; 
$height = 60; 
$tlx = floor($img_width/2) - floor ($width/2); 
$tly = floor($img_height/2) - floor ($height/2); 

if ($tlx < 0) 
{ 
$tlx = 0; 
} 
if ($tly < 0) 
{ 
$tly = 0; 
} 
if (($img_width - $tlx) < $width) 
{ 
$width = $img_width - $tlx; 
} 
if (($img_height - $tly) < $height) 
{ 
$height = $img_height - $tly; 
} 
$dest = imagecreatetruecolor ($width, $height); 
imagecopy($dest, $im, 0, 0, $tlx, $tly, $width, $height); 
imagejpeg($dest, $filename); // Second parameter 
imagedestroy($dest); 
} 

imagejpeg는로 저장되어야 파일명을 취하는 두 번째 매개 변수를 갖는다.

+0

두 번째 매개 변수가있는 imagejpeg 덕분에 문제가 해결됩니다 .wow, awesome response – user359294

1

이 코드에서 하나 이상의 항목 (이미지)에 대해이 기능을 사용하면 다른 출력 위에 표시됩니다 (같은 출력 공간을 차지하게됩니다).

당신은 RAW 이미지 데이터를 생성하는 : 당신이 HTTP 요청에서 한 번에 여러 이미지를 제공 할 수 없습니다 (당신은 당연히 파일에 무제한 금액을 절약 할 수있다, 더 많은 매개 변수를 취할 수 imagejpg는) 더 괜찮은 브라우저에 무엇을 알 수 없을 것입니다 그것을 만드십시오.

당신은 내가이 기능은 이미지 때의 대상에 대해 같은 (정적) 이름 ($ 이명 령)을 가지고 있기 때문에이 생각) (imagecopyresampled에서

을 보면, 다른에 하나 개의 이미지를 오버레이하려면 그것은 창조되었습니다 (imagecopy).

이는 경우가 아니라 즉시 함수는 $ 이명 령이 더 이상 존재하지 않습니다 종료로 (그것은 단지 기능의 범위 내에서 존재했다. http://php.net/manual/en/language.variables.scope.php

+0

"[Y] ou 한 번에 HTTP 요청으로 이미지를 제공 할 수 없습니다 "라는 메시지가 표시되어 문제의 성격을 이해하게되어 매우 도움이되었습니다. 감사합니다. 파일에 저장 한 다음 병합합니다. – user359294

+0

괜찮습니다.이제 누군가 내가 왜 투표를했는지 말해 주면 친절 해져서 내 사악한 방법을 수정하고 앞으로의 과격한 반향을 막을 수 있습니다. – Wrikken

관련 문제