2012-06-20 3 views

답변

0

ImageResizer는 이미크기 이미지를 가지고 있지 않습니다. 그러나 메타 데이터를 디코딩하고 메타 데이터를 제거한 다음 웹 호환 및 웹 효율적인 형식 (일반적으로 jpg 또는 png)으로 다시 인코딩합니다.

ImageResizer에서 원본 파일을 제공하려는 경우 전체 프로세스를 건너 뛰는 것은 다른 질문입니다. 아래에서 대답하려고합니다.

다음과 같은 주요 목표가 있습니다. 소스 이미지 파일의 너비와 높이를 발견하려면 최소한 부분적으로 디코딩해야합니다.

이 최적화 제한된 상황

  1. 는 전체 파일을 메모리로로드하지 않고 폭 & 높이를 분석 할 수있는 소스 파일의 형식으로 유용 (또는 수)이다. JPG/PNG 예, TIFF - 아니요, FreeImageDecoder에서 지원하는 30 개 이상의 형식, 아니요. 등 S3Reader, SqlReader, AzureReader, RemoteReader, MongoReader,
  2. 규칙을 재 작성 없음 URL이 제자리에 UNC 경로를 제거하고 플러그인 -
  3. 소스 파일
  4. 지역, 낮은 대기 시간 디스크 스토리지에,이고 접근 IIS.
  5. 맞춤 플러그인이 사용되지 않습니다.
  6. 이미지가 메타 데이터가 제거 된 적절한 압축 설정으로 이미 웹에 최적화 된 형식으로되어 있습니다.
  7. 다른 URL 명령이 사용되지 않습니다.
  8. 워터 마킹 규칙이 없습니다.
  9. 캐시 헤더를 제어 할 필요가 없습니다.
  10. 이미지가 악의적이지 않은지 100 % 확신 할 수 있습니다. 다시 인코딩하지 않으면 파일이 스크립트와 비트 맵 모두가 될 수 없습니다.

또한 결과를 캐시하지 않는 한이 '최적화'는 실제로 응답 시간 또는 서버 측 성능을 향상시키지 못합니다. 차원 데이터는 별도로 디코딩해야하므로 차원 일치가 발생했는지 여부에 관계없이 모든 요청에 ​​균일하고 중요한 오버 헤드가 추가됩니다.

내가 유용하다고 생각하는 유일한 상황은 Photoshop에서 압축을 최적화하는 데 많은 시간을 소비하고 필요하지 않으면 ImageResizer가이를 만지지 않도록하려는 경우입니다. 관심이 있다면 해당 시나리오에 URL을 적용하지 마십시오. 또는 원래 바이트를 그대로 유지하려면 process=no으로 설정하십시오.

확실히 이것을 할 수있는 플러그인을 만들 수 있습니다. 하지만 많은 사람들이 사용하기를 원하는 것이 아니며 순익이 될 사용 시나리오를 기대할 수 없습니다.그냥 Config.Current.Pipeline.PreHandleImage 이벤트를 처리하고 e.GetSourceImage()에 의해 반환 된 스트림을 구문 분석 코드 e.ResizeImageToStream 교체, 앞으로 급락 할 경우

, Config.Current.GetImageBuilder().GetFinalSize()에 비교하여 치수 논리를 (적용 후 스트림을 재설정하고 다음과 같이 원하는 경우는 그대로 복사 :

이미지가 실제로 필요로하는 경우와 같은 특정 시나리오를 처리 할 수 ​​
using (Stream source = e.GetSourceImage()) 
    StreamExtensions.CopyToStream(source,stream); //4KiB buffer 

는 1 픽셀의 작은 크기를 조정할 수 있지만, 1 개 픽셀의 경계를 추가하는 등,하지만 가까이 당신이 까다로운 경우, 봐. GetFinalSize의 소스 코드이며 캔버스 범위 대신 이미지 경계를 반환합니다.

+0

매우 답답한 답변 주셔서 감사합니다 :) 내 문제는 바로 그 것입니다. 우리는 이미 "손으로"최적화 된 이미지를 엉망으로 만들고 싶지 않지만, 문제에 대한 다른 해결책을 찾고 다시 시도하려고합니다. 그리고 다른 사람이 발견되지 않으면 나는 이제 내 플러그인을 만드는 방법을 알고있다 :)! 다시 한 번 감사드립니다! – bang

+0

손으로 최적화 된 이미지를 엉망으로 만들고 싶지 않다면 쿼리 링을 추가하지 마십시오. ImageResizer가이를 만지지 않습니다. 서버는 처리중인 이미지가 직접 최적화되어 있는지 여부를 알 수 없으므로 요청한 결정을 내릴 수 없습니다. –

+0

예, 알고 있습니다. 그러나 CMS도 관련되어 있습니다. :) .... – bang

관련 문제