2010-08-05 23 views
3

在我的網站上,用戶可以上傳照片。我目前壓縮並調整照片大小以確保它們不是大文件。但是這會產生不同維度的照片......這使得我認爲網站有點「醜陋」。如何在C#中使用空格填充上傳的照片?

我想確保縮略圖是方形圖像,但不是使用填充。如果縮略圖中的照片有些丟失,這沒關係。我想盡可能保持照片的逼真度,即使這意味着需要裁剪一些照片。

+2

在網站上做一次這樣的小技巧一次:如果原始圖像比較高,則從兩側裁剪等量。但是,如果原始圖像比寬度更高,則從底部收割比從頂部收割得更多,根據我的經驗,您不太可能丟失有價值的細節(例如,在肖像照片中,您會裁剪掉對象的腿,而不是他們的臉!) – Carson63000 2010-08-06 01:04:04

+0

@ Carson63000 - 你搖滾,這是一個很好的觀點。謝謝! – Chaddeus 2010-08-06 01:36:16

回答

3

我寫了一些代碼來做到這一點千真萬確的事情。我選擇裁剪它,因爲在不保留寬高比的情況下調整大小看起來非常可怕。我做了農作物,然後調整大小以創建略圖圖像:

public Bitmap CreateThumbnail(Bitmap RawImage) 
    { 
     int width = RawImage.Width; 
     int height = RawImage.Height; 

     Size ThumbnailDimensions = new Size(); 
     ThumbnailDimensions.Width = 100; 
     ThumbnailDimensions.Height = 100; 

     Rectangle cropArea = new Rectangle(); 
     if (width > height) 
     {    
      cropArea.Width = height; 
      cropArea.Height = height; 
      cropArea.X = 0; 
      cropArea.Y = 0;     
     } 
     else if (width < height) 
     { 
      cropArea.Width = width; 
      cropArea.Height = width; 
      cropArea.X = 0; 
      cropArea.Y = 0; 
     } 
     if(width != height) Bitmap thumbnail = CropImage(RawImage, cropArea); 

     thumbnail = ResizeImage(thumbnail, ThumbnailDimensions); 
     return thumbnail; 
    } 

這只是從左上角的作物,然後它會調整到我的縮略圖的尺寸。

+0

這正是我所期待的,非常感謝! – Chaddeus 2010-08-06 01:35:00

+0

沒問題玩得開心。 – Adrian 2010-08-06 05:05:09

+5

「CropImage」的實現在哪裏? – Andrey 2011-12-21 22:51:03

-1

而不是裁剪,我會使div或任何你把它們放在一個固定的方形大小。縮放圖像以適合該廣場內。

你會如何決定裁剪它?從左上角?右下?中央?

+0

我不想做客戶端擴展 - 因爲這是一個性能問題。我計劃從左上角開始使用最短尺寸作爲尺寸的平方。然後像Carson6300提到的那樣,如果它比較高的寬度更寬,那麼每邊都會相等。如果它高於寬度,則大部分從底部開始收割。 – Chaddeus 2010-08-06 01:38:07

+0

這個問題是,如果你正在拍攝一個大的圖像,只是縮小瀏覽器仍然加載大圖像。乘以一些圖像和你的網站加載速度坦克。 – Adrian 2010-08-06 05:06:15

+0

@Chad,@antonlavy - 我的答案在哪裏,我說客戶端縮放? – 2010-08-09 16:05:27

2

我可以想象你需要採取最短尺寸(無論是瓦特^h),並使用它作爲您的維度創建裁剪後的圖像,基本上可以裁剪,然後縮放圖像。作爲修剪圖像的示例,請查看this article。還請檢查this Stack Overflow question有關圖像質量。

+0

這是一個很好的觀點,使用裁剪設置的最短尺寸。謝謝。 – Chaddeus 2010-08-06 01:31:09

-1

要將矩形變成方形,您需要填充,調整大小而不保留寬高比或裁剪(或組合)。

下面是一些代碼爲劃出

http://snippets.dzone.com/posts/show/1484

(我的Atalasoft工作 - 在我們DotImage照片SDK),這是

AtalaImage img = new AtalaImage("filename.jpg"); 
AtalaImage img2 = new CropCommand(/*point and size of crop */).Apply(img).Image; 
img2.Save("filename", new JpegEncoder(quality), null);