2012-12-12 4 views
0

내가 현재 PHP에서 함수가 IMG()를 호출 한 크기 조정 이미지에서 이미지 태그를 분리 :같은, 적어도 2 개 개의 인수를 취하는

<img src='/cache/foo_XXXXX.jpg' width='100' height='76' /> 
: 이런 식으로 뭔가를 반환

print img("foo.jpg", 100); 

따라서 함수는 인수를 취하고 원본 파일의 크기를 조정 한 다음 서버에 캐시 된 파일로 저장하고 이미지 태그를 반환합니다. 캐시 된 버전이 이미 존재하면 분명히 반환하고 다음 번에 처리를 저장합니다.

이제는 100 개 중 99 개 케이스에서 완벽하게 작동하지만 일부 사이트의 경우 이미지가 짙은 페이지가 있고 X 일 이후에 캐시 된 버전의 이미지가 만료되어 img() 함수는 50 개 이상의 고해상도 이미지를 작은 미리보기 이미지로 다시 만들어야하며 이러한 페이지를로드하는 데 몇 초 정도 걸리므로 허용되지 않습니다.

제 생각에 이것을 구분하는 것입니다. 그래서이 일을 :

print img("foo.jpg", 100); 

이를 반환하십시오 IMG() 함수는 실제로 모든 파일을 처리하지 않음을 의미하지만, 얻을 수있는 브라우저에 지시 오히려 출력 HTML

<img src='img.php?ARGUMENTS' width='?' height='?' /> 

서버의 정적 이미지 파일이 아닌 PHP 스크립트의 이미지.

이제 "인수"부분에는 img.php가 처리 한 것과 동일한 방식으로 파일을 처리해야하는 모든 정보가 들어 있습니다. 아마도 모든 인수의 직렬화 된 문자열 버전 일 것입니다 함수에?

하지만 문제는 이미지 태그의 너비/높이 값입니다! 처리가 현재 스크립트의 범위를 벗어나기 때문에 결과 이미지가 얼마나 커질지 전혀 알지 못합니다. 맞습니까? 나는 분명히 img.php가 완료되어 그것을 반환 할 때까지 기다릴 수 없다. 두 번째 인수는 100, "50 %", "< 40"및 기타 등등 수 있으며 처리 방법을 imagemagick 사용하고 있습니다. 아마도 imagemagick 함께 "dryrun"방법입니다 - 즉 imagemagick 데 결과 크기를 반환하는 데 있습니다. 특정 명령을 사용하는 특정 파일?

어떻게 해결할 수 있습니까?

답변

0

데이터베이스의 어딘가에 모든 이미지 목록이 있습니다. 맞습니까? HTML을 생성하는 동안 너비와 높이에 대한 필드를 추가하고 크기 조정 된 너비와 높이를 계산할 수 있습니다. 축소판 너비와 높이를 데이터베이스에 추가 할 수도 있습니다.

+0

아니요, 이미지는 서버의 하드 드라이브에있는 파일 일뿐입니다. 최소한 img() 태그에 관한 한. 어떤 경우에는 파일에 대한 참조가 데이터베이스에 보관되지만 다른 용도로 다른 데이터베이스를 많이 사용하고 있으며 모두 img()를 사용하여 표시합니다 – Sandman

관련 문제