2011-12-15 5 views
0

데이터베이스에서 작은 조각에 대한 이미지를 자르려고합니다. 여기에 내 코드 : PHP 문자열이 작동하지 않습니다.

$image = imagecreatefromjpeg($filename); 
$width = $row['width']; 
$height = $row['height']; 
$new_width = 480; 
$new_height = 360;   
$offset_x = (int)(round($height*360/$width));//100 
$offset_y = 0; 
$new_image = imagecreatetruecolor($new_width, $new_height); 
imagecopy($new_image, $image, 0, 0, $offset_x, $offset_y, $width, $height); 
imagejpeg($new_image,$newimg); 

그러나 라인 $offset_x에서

(int)(round($height*360/$width))가 작동하지 않습니다. 을 넣으면 100과 같이 모두 images이 잘릴 지 모르지만 오프셋 위치는 기꺼이하지 않습니다. 그래서 true string to int하는 방법?

BTW :이 경우에는 foreach의 데이터베이스에서 이미지를 호출하고 자릅니다.이 코드를 foreach에 넣으면 unset해야합니까?

+0

$ 행은 어디에 설정되어 있습니까? $ height와 $ width의 값은 무엇입니까? – ben

+0

어쩌면 try intval $ offset_x = intval (round ($ height * 360/$ width)); http://php.net/manual/en/function.intval.php – rogerlsmith

+0

@ben,'mysql query => $ row [ 'width']의'$ height','$ width'와 $ row [ 'width' 높이 ']'. –

답변

3

PHP에서 문자열을 숫자로 변환 할 필요가 거의 없지만 암시 적으로 꽤 잘 수행됩니다. 예를 들어, 코드가 추가 된 변환없이 잘 작동합니다 :

<?php 
    $height = '100'; 
    $width = '200'; 
    $offset = round($height * 360/$width); 
    echo $offset; 
?> 

http://codepad.viper-7.com/LJEXIF

당신이 가진 수 있습니다 문제를, 그것은 당신에게 올바른 결과를주고 있지 않다면, 작업의 우선 순위입니다. 귀하의 코드,

round($height * 360/$width) 

그것은 먼저 $height에 의해 결과를 곱 $width에 의해 360을 나눕니다

round($height * (360/$width)) 

의 동일합니다. 그것이 당신이 원한 것이라면, 당신의 문제는 다른 곳에 있습니다. 테스트 변수를 사용하여 문제를 시도하고 재현 한 후 http://codepad.viper-7.com에 게시하고 여기에 다시 게시해야합니다.

+0

처음에는 곱셈을하기 전에 나눗셈이 발생한다고 생각했으나 연산자 우선 순위 차트 http://php.net/manual/en/language.operators.precedence.php에 따르면 그렇지 않습니까? 그렇지 않습니까? –

+0

@Interstellar_Coder 표준 수학 우선 순위 인 PEDMAS (괄호 지수 배제 덧셈)를 따르며 http://codepad.viper-7.com/xOcjTQ에서 볼 수 있습니다. 이 차트는 잘못된 암시입니다. 맨 위에있는 요소는 맨 아래에있는 요소보다 우선합니다. "연산자"열에있는 요소의 위치는 무작위로 보입니다. –

+0

Ahh yes Xeon, PEDMAS를 따르는 것이 기쁘다. 처음에는 이것이 의심 스럽지만 차트를보고 난 혼란 스러웠다. 이 페이지는 그 행에 대한 연산자 컬럼 내에서 연산자가 왼쪽에서 오른쪽으로 우선 순위가 있다고 추측합니다. 해명 해줘서 고마워. –

관련 문제