2011-03-09 7 views
6

사용자가 업로드 한 이미지에 몇 가지 제한 사항을 적용하려고하므로 처리하는 스크립트에 메모리가 부족하지 않습니다.이미지 처리에 필요한 메모리를 계산하는 방법은 무엇입니까?

더 많은 메모리를 사용하는 이미지는 더 높은 해상도를 가진 이미지입니다. 그들은 큰 크기의 바이트를 가질 필요가 없습니다. 예를 들어 4000x2500 해상도의 46kb 이미지와 일부 투명 필름 (PNG)의 경우 크기를 조정하는 데 약 90MB가 소요되었습니다.

정확히 필요한 메모리를 미리 계산할 수있는 방법이 있습니까?

아이디어가 있으십니까?

+1

이미지 조작에 대해서는 잘 모릅니다 만 압축되지 않은 비트 맵 파일 크기가 일반 야구장에 있지는 않습니까? – drudge

+0

내가 사용하는 일반적인 경험 법칙 : GD를 사용하여 이미지를로드하는 데 단지 가로 * 세로 * 4, 크기 조정 된 이미지와 동일한 계산을 ... 바이트로 –

답변

3

일반적으로 어림짐작은 원본 이미지와 대상 이미지 모두에 대해 너비 x 높이 x 4 (rgba)이며 스크립트 자체에서 이미 소비 한 메모리 양은 잊지 마십시오.

+1

작동하지 않습니다. 나는 이것을 가지고있다 : (4000 * 2462 + 300 * 185) * 4/1024/1024 = 37.78MB. 이미지 처리 부분이없는이 스크립트는 약 1MB를 사용합니다. 이미지 처리와 함께, 86.77mb 걸립니다. – HappyDeveloper

+0

그건 특이한 것이고, 항상 저에게 도움이되었습니다. 테스트를 위해, 이미지 호출 전후에'memory_get_usage (true)'를 출력하여 정확하게 얼마나 많은 양이 사용되고 있는지를 알 수 있고 자신의 알고리즘을 고안 할 수 있습니다. – steveo225

+0

아마 내가 사용하고있는 이미지 라이브러리가 어리석은 짓을하고 있을지도 모른다. 하지만 다른 라이브러리에서 테스트 해봤는데 같은 일이 일어났습니다. GD 만 사용하면 제대로 작동하므로 확신 할 수 있습니다. – HappyDeveloper

0

파일을 업로드 한 후에 GD 라이브러리를 사용하면 getimagesize()을 사용할 수 있습니다. 높이 및 너비를 확인하여 처리하거나 오류를 반환할지 여부를 결정할 수 있으며, 또한 고려해야 할 색상 당 사용되는 비트 수를 반환합니다.

유효성 검사는 파일 크기와 크기에 따라 달라질 수 있습니다.

관련 문제