2012-11-13 2 views
1

다양한 크기의 이미지 업로드를 허용 한 다음 미리보기 이미지의 미리 정의 된 영역을 잘라낼 수 있습니다.임의의 크기의 이미지를 기준으로 이미지가 잘릴 수있는 방법은 무엇입니까?

썸네일 크기는 150x150으로 사전 정의됩니다. Jcrop.js 도구를 사용하여 이미지의 섹션을 선택하십시오.

는 문제점 :

렌더링 된 이미지에 설정된 높이/폭을 구현함으로써, 원 화상보다 작은 사이즈의 업로드 된 화상을 표시하고있는 영역을 선택할 때 재생하게되는 스케일 팩터가 자르기.

자르기 영역의 크기를 비례 적으로 줄이거 나 표시된 크기와 비교하여 실제 이미지 크기에 비례하여 이미지의 크기를 조정해야합니다.

질문 : 브라우저의 규모가 원본 이미지 대 이미지를 표시 알아낼 어떻게

? 현재 이미지를 저장하는 데 다음 코드를 사용하고 있지만 스케일링을 고려하면 어떻게됩니까?

public static Image CropImage(Image originalImage, int x, int y, int width, int height) 
    { 
     var bmp = new Bitmap(width, height); 
     bmp.SetResolution(originalImage.HorizontalResolution, originalImage.VerticalResolution); 

     using (var graphic = Graphics.FromImage(bmp)) 
     { 
      graphic.SmoothingMode = SmoothingMode.AntiAlias; 
      graphic.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      graphic.PixelOffsetMode = PixelOffsetMode.HighSpeed; 

      graphic.DrawImage(originalImage, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel); 

      return bmp; 
     } 
    } 

보너스 질문 :

내가 발견 한 또 다른 문제는 ImageFormatMemoryBMP를 생성하는 새로운 비트 맵을 만들 때 원본 파일의 ImageFormat를 전송하는 더 효율적인 방법이 될 수없는 것으로 보인다 그리고 당신은 할 때 Bitmap.Save (memorystream, original rawformat)를 호출하면 오류가 발생합니다. 그리고 비트 맵 RawFormat에는 setter가 없습니다.

그럼 어떻게 새 비트 맵에서 형식을 설정할 수 있습니까?

답변

0

아마도이 문제는 프런트 엔드에서만 해결되었으므로 서버 측을 사용할 필요가 없습니다.

Jcrop에는 스케일 팩터 핸들러가 내장되어 있습니다. 나는 그것을 이해

http://deepliquid.com/content/Jcrop_Sizing_Issues.html

지금 당신은 두 가지 방법을 사용할 수 있습니다. '상자 크기 조정'을 사용하여 프런트 엔드에서 이미지의 크기를 '조절'하거나 이미지의 '진정한 의미'를 말할 수 있으며 축척 계수를 계산하고 자신의 좌표를 처리 할 수 ​​있습니다. http://deepliquid.com/content/Jcrop_API.html#API_Invocation_Method

var jcrop_api, 
options = { trueSize: [500,370] }; 

$('#target').Jcrop(options,function(){ 
jcrop_api = this; 
}); 
: 당신은 API 방법을 사용하여 jcrop 호출해야하는 실제 크기의 방법을 사용하여

상자 크기

$('#cropbox').Jcrop({ boxWidth: 450, boxHeight: 400 }); 

실제 크기

$.Jcrop('#cropbox',{ trueSize: [500,370] }); 

행운을 빌어 요!