2011-10-07 2 views
0

최근에 다른 서버에서 이미지를 다운로드하고, 이미지의 크기를 변경하고, 이미지를 자체 서버에 저장하는 PHP를 사용하여 이미지 크기 조정 프로그램을 작성했습니다.너비와 높이를 사용하여 이미지의 파일 크기를 어떻게 추정 할 수 있습니까?

나쁜 소식은 내 호스팅 계정이 64M의 PHP 메모리 제한 만 허용한다는 것입니다. 이것은 내 클라이언트가 업로드하는 HUUUUGE 파일 크기 (3 - 4MB)를 조정하도록 설정되지 않았습니다. 이 이미지를 만나 스크립트를 어기면 치명적인 오류가 발생합니다.

클라이언트에게이 단점을 알렸음에도 불구하고 클라이언트는 큰 이미지를 계속 업로드하고 스크립트는 계속 손상됩니다.

getimagesize()을 사용하여 이미지를 다운로드하기 전에 너비와 높이를 얻을 수 있습니다.이 정보를 사용하여 이미지 크기 조정기가 들어가기 전에 탈락 할 수있는 전체 파일 크기를 알아낼 수 있다면 멋진 "no image available"대안.

너비와 높이를 사용하여 이미지 파일 크기를 정확하게 계산하려면 어떻게해야합니까? 깊이가 24 인 것으로 가정 할 때 어떻게해야합니까?

답변

0

곱셈. 높이를 너비에 3을 곱하면됩니다. 그리고 이러한 모든 바이트를 처리하기 위해 여유 메모리를 넣으십시오. 이미지 크기의 두 배.

아무 관련이 없습니다 파일 크기는입니다.

+0

고마워요. 계산이 이미 있었지만 파일 크기가 혼란 스러웠습니다. - 건배 –

3

메모리의 이미지는 항상 JPEG 또는 GIF 또는 BMP로 압축 된 동일한 가중치의 가중치를 사용합니다. 그것은 BIT-MAP이라고 불립니다. 따라서 메모리의 이미지 크기를 계산하려면 폭, 높이 및 비트 크기를 사용하여 비트 가중치를 얻고 8로 나눕니다. 바이트 섬을 얻습니다. 이 같은 paletized 이미지로 일부 지역의 이미지에서 더 많은 무게를 얻을 수 있음을

$ByteSize = Width*Heigh*(24/8) 

주, 그것은 메모리에 있지만, 대부분의 시간이이보다 적은 체중해야 이미지의 색상 팔레트를 저장해야합니다 비트 맵.

+0

업로드 된 파일이 없으면 PHP에서 너비와 높이를 얻을 수있는 방법이 없습니다. 이미 업로드 된 파일에서 getimagesize()가 작동합니다. –

+2

이 규칙에는 몇 가지 예외가 있습니다. 예를 들어, libjpeg를 사용하는 ImageMagick은 전체 이미지를 메모리에로드하지 않고 비 프로 그래 시브 JPEG 이미지를 확장 할 수 있습니다. 이것은 Wikipedia가 실제적으로 살찌는 서버가 아닌 것에 대해 [엄청나게 큰 이미지] (http://commons.wikimedia.org/wiki/File:Georgetown_PowerPlant_interior_pano.jpg)를 재조정 할 수있는 방법입니다. 원칙적으로 누군가가 소프트웨어를 작성한 경우 유사한 기술을 다른 이미지 형식에 사용할 수없는 이유는 없습니다. –

0

서버에 업로드하기 전에 PHP로는 을 사용할 수 없지만 javascript를 사용할 수 있습니다!

https://developer.mozilla.org/en/DOM/File

이의 함께 작동하고 즉시

fileInput.files[0].fileSize 

이 읽을 사용하여 파일 크기 제공 :

https://developer.mozilla.org/en/Using_files_from_web_applications 을 http://hacks.mozilla.org/2009/12을/다중 파일 입력 - 파이어 폭스 - 3-6/

희망이 도움이!

+0

아아아,하지만 그렇게 간단했을 텐데! 불행히도, 내 사이트는 모든 파일이 업로드되는 외부 소프트웨어 킷과 상호 작용하며, 여기에 무슨 일이 일어나고 있는지 전혀 제어 할 수 없습니다. : –

+0

@BenAzouelos 파일이 이미 업로드되어 있고 로컬에서 사용할 수 있습니까? 아니면 $ _FILES까지 가져올 수 있습니까? –

+0

XML 피드가 다운로드되어 추출됩니다.이 파일은 내 서버에 있지 않지만 각 이미지의 위치를 ​​제공합니다. 그런 다음 루프를 통해 각 URL에 이미지 크기 조정 스크립트를 사용하고 내 서버에 저장합니다. 여기에 대한 응답 덕분에 이미 메모리 사용을 해결하는 기술로 문제점을 해결했습니다. –

0

크기는 항상 형식에 따라 다릅니다. 이미지를 압축 할 때 이미지 자체의 크기는 파일 크기에 아무런 영향을 미치지 않습니다. Bitmap (또는 simmilar) 형식을 사용하는 경우 파일 크기를 잘 읽을 수있는 유일한 방법이 있습니다.

예를 들어, JPEG는 크기가 10MB 일 수 있으며 압축이 어떻게 작동하는지에 따라 크기가 1MB 만 회전 할 수 있습니다.

관련 문제