2009-03-15 2 views
4

질문이 있습니다. 내 서버에 호스팅 된 이미지가 있습니다. 이미지 크기를 조정하고 저장하기 위해 이미지를 업로드 할 때 이미 방법을 알고 있지만 마음에 또 다른 생각이 있습니다.ASP.NET에서 서버의 이미지 크기 조정 및 표시

  1. 사용자가 이미지를 요청할 때 크기를 조정할 수있는 방법이 있는지 궁금합니다. 사용자가 업로드 한 시점이 아닙니다.

예를 들어 사용자가 이미지를 업로드하고 크기를 조정하지 않고 크기를 조정 한 이미지를 저장하지 않습니다. 대신, 이미지가 ASP.NET img 컨트롤/태그를 통해 사용자에 의해 요청되면 즉시 표시되는 이미지의 크기를 조정하여 이미지를 표시하고 img 태그/컨트롤을 통해 표시합니다.

왜 이렇게하고 싶습니까?

디스크 공간을 절약합니다. 대부분의 서버에는 디스크 공간 제한이 있지만 서버 처리 제한은 없습니다. 그래서 디스크 공간을 절약하고 대신 처리 공간을 사용하고 싶습니다.

편집 : 시작 웹 사이트로서 현재 처리 시간을 절약하는 것보다 디스크를 절약하는 것이 좋습니다. 나는이 순간 많은 양의 공간을 위해 돈이별로 없다. 잘하면 사이트가 시작되면 변경됩니다.

아이디어가 있으십니까? 고마워요 얘들 아.

+0

안녕하세요 Scott, 가능한 시나리오는 처리 능력보다 디스크 공간을 더 많이 만들 수 있습니다. 그리고 이미지 크기가 (모든 사용자 요청에 대해) 매우 집중적으로 처리되고 전반적인 웹 응용 프로그램 성능에 영향을 미치지 않겠습니까? –

+0

@Nahom : Amazon CloudFront 캐싱 또는 디스크 캐싱 (또는 둘 다)과 결합 된 것이 아닙니다. 동적 이미지 프로세싱은 전처리에 비해 끝없는 이점을 가지고 있습니다. 감사합니다. –

답변

4

크기 조정 된 이미지에 대한 URL을 '제어'할 수 있다고 가정합니다. 예를 들어 전체 크기 이미지는 <img src="uploads/myphoto.jpg"/>으로 표시 될 수 있습니다. 축소판은 <img src="uploads/myphoto.jpg.ashx"/>과 같은 ASPX 또는 ASHX 일 수 있습니까?

article on CodeProject - Dynamic Image Resize 당신이 찾고있는 (그리고 VB에서 비록 당신은 C#을 사람이 있다면, 그것은 포트에 하드해서는 안됩니다) 정확히 소스 코드를 갖고있는 것 같아요. 희망이 도움이됩니다.

마지막으로 다양한 형식의 캐싱 (HTTP 헤더를 사용하여 가능한 경우 클라이언트 나 프록시에서 이미지가 캐시되도록하고 내장 된 ASP.NET 기능을 사용하여 불필요한 동일한 이미지를 반복해서 처리하는 것).

디스크 쿼터를 절약 할 수 있지만 실제로는 다른 모든 페이지/요청 ... 한 가지 생각을 늦추고 있습니다. 이미지를 표시 할 때

+0

. 이것은 정확하게 내가 찾고 있었던 것 같습니다. –

+0

URL 인증 시스템으로 멋지게 연주하려면 HttpHandler보다 HttpModule을 사용하는 것이 좋습니다. [피하려면 이미지 크기 조정 함] (http://imageeditor.codeplex.com/) 또는 [동적 ImageResizer 라이브러리 가져 오기] (http://imageresizing.net)를 참조하십시오. –

0

IHttpHandler 구현을 만들어 이미지 요청에 응답 할 수 있습니다. 처리기에서 디스크의 이미지를로드하고 필요한 크기로 변환하는 코드를 가질 수 있습니다. 응답이있는 적절한 MIME 형식을 반환하고 WriteBytes 메서드를 사용하거나 이름을 잊어 버렸습니다. 또한 콘텐츠 만료 헤더를 조사하여 매번 동일한 클라이언트에서 이미지를로드하지 않아도되지만 대신 캐시 할 수 있습니다.

-1

그것은 이미지의 정말 실제 크기 조정되지 않습니다, 그것은 오히려 크기를 조정하지만, 그것은 모든 시간을 노력하고 있습니다

<img src="myimage" height="height you want to give" width="width you want 
to give" alt="" /> 

난 그냥 간단한 성공을 사용했다.

+0

이 문제는 메가 바이트 이상인 경우 이미지가 메가 바이트로 유지된다는 것입니다. C#은 실제로 이미지가 메가 바이트가되지 않도록 이미지의 크기를 조정합니다. –

+0

사실,이 이미지는 실제 이미지 크기와 동일합니다. – Dmitris

+0

이것은 매우 작은 이미지 (수 KB)에서는 좋지만 앞에서 설명한 이유 때문에 더 큰 이미지에는 권장하지 않습니다. 서버 측 크기 조정 및 처리량 캐싱에 따라 더 나은 선택입니다. –

2

동적 이미지 크기 조정에는 많은 이점이 있으며, 그 중 최소한의 디스크 공간 사용이 줄었습니다. 그러나 Amazon CloudFront 또는 디스크 캐시와 같은 지속적인 캐시 형식과 결합해야합니다.

동적 이미지 크기 조정은 웹 사이트에서 뛰어난 민첩성을 제공하는 반면 이미지 변형 사전 생성은 사용자를 잠 그어 최종 변경을 방지합니다. 캐싱과 결합 할 때, 둘 사이에는 런타임 성능 차이가 없습니다.

ImageResizer library offers disk caching, CloudFront caching, and correct memory and cache management. 2007 년부터 끊임없이 개선되고 유지되어 왔으며 매우 방탄합니다. 소셜 네트워킹 사이트도 운영하고 있으며, 일부는 백만 장 이상의 이미지를 보유하고 있습니다.

시간이 오래 걸리고 트래픽이 테스트되고 단위 테스트를 거친 라이브러리입니다. 매우 간단합니다. 쿼리 문자열에 ?width=x&height=y을 추가하기 만하면됩니다. 20 + 플러그인을 통해 기능을 추가 할 수 있으므로 사용하지 않는 코드와 기능으로 인해 무게가 줄어들지 않습니다.

CraigD에서 언급 한 기사는 HttpModule 대신 HttpHandler를 사용한다는 점에서 본질적으로 성능이 제한되어 있습니다. HttpHandler는 크기가 조정 된 이미지를 디스크에 기록한 후 IIS 기본 코드로 다시 요청을 전달할 수 없습니다. . 또한 jpeg 인코딩을 올바르게 조정하지 않거나 ASP.NET 캐시 또는 URL 권한 부여 시스템에서 제대로 작동하지 않습니다. 비록 내가 본 적이 있지만 대부분의 샘플 코드와 비교하면 violates far fewer of the image resizing pitfalls I've compiled입니다.

나는 강력하게 using the ImageResizer library을 제안합니다. 그것은 좋은 코드, 내가 쓴 :) 샘플 코드를 사용하여 끝내거나 직접 작성한다면 please avoid these pitfalls!

0

제한없는 처리를 요구하지만 디스크 공간은 제한됩니다. 대부분의 경우 처리 제한을 적용하지 않더라도 더 많은 고객을 확보하고 사이트에 도달하면 처리가 저장 공간보다 병목 현상이 심해지며 처리를 추가하는 데 더 많은 비용이 듭니다. 또한

  • 디스플레이 및 축소판 버전을 저장하는 경우에도 크기가 크고 압축 된 버전이 원본 공간의 % 10을 차지합니다.
  • 그 외에 브라우저에 크기를 표시하고 표시하면 더 빠를 것입니다.