Asp.NET JQuery ve Jcrop Kullanarak Resim Crop İşlemi | Ali Karahisar

Asp.NET JQuery ve Jcrop Kullanarak Resim Crop İşlemi

Asp.NET bir resimin nasıl crop edilebileceğini göstericem. Bu işlemi yaparken Jquery'den ve bir Jquery eklentisi olan Jcroptan yararlanacağız.

Bu makaleyi ilk olarak Alttantire Forumlarında yayınlamıştım.

Öncelikle Default.aspx dosyamızın head tagları arasına

link href="css/jquery.Jcrop.css" rel="stylesheet" type="text/css" />




Kodlarını ekleyin. ancak burada önemli olan Jcrop eklentisini indirin :)

Eklentiyi indirdikten sonra aspx dosyanızın yanına css ve script diye klasör açın ve indirdiğiniz dosyadan çıkan jquery.Jcrop.css dosyasını css klasörüne, jquery.Jcrop.js dosyasını ise script klasörüne atın. Bu arada blogger'dan kaynaklanan bir sorun nedeniyle bu kodun en başında ki link tagında "<" işareti yok onu koymayı unutmayın :) Sonra body tagları arasına




















































































Kodlarını ekleyin.

Şimdi default.aspx.cs dosyamıza ise

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using SD = System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

public partial class _Default : System.Web.UI.Page
{
    String path = HttpContext.Current.Request.PhysicalApplicationPath + "images\\";
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnUpload_Click(object sender, EventArgs e)
    {
          Boolean FileOK = false;

  Boolean FileSaved = false;

 

  if (Upload.HasFile)

  {

    Session["WorkingImage"] = Upload.FileName;

    String FileExtension = Path.GetExtension(Session["WorkingImage"].ToString()).ToLower();

    String[] allowedExtensions = { ".png", ".jpeg", ".jpg", ".gif" };

    for (int i = 0; i < allowedExtensions.Length; i++)

    {

      if (FileExtension == allowedExtensions[i])

      {

        FileOK = true;

      }

    }

  }

 

  if (FileOK)

  {

    try

    {

      Upload.PostedFile.SaveAs(path + Session["WorkingImage"]);

      FileSaved = true;

    }

    catch (Exception ex)

    {

      lblError.Text = "Dosya Yüklenemedi." + ex.Message.ToString();

      lblError.Visible = true;

      FileSaved = false;

    }

  }

  else

  {

    lblError.Text = "Desteklenmeyen Dosya Tipi";

    lblError.Visible = true;

  }

 

  if (FileSaved)

  {

    pnlUpload.Visible = false;

    pnlCrop.Visible = true;

    imgCrop.ImageUrl = "images/" + Session["WorkingImage"].ToString();

  }

}
    
    protected void btnCrop_Click(object sender, EventArgs e)
    {
        string ImageName = Session["WorkingImage"].ToString();

        int w = Convert.ToInt32(W.Value);

        int h = Convert.ToInt32(H.Value);

        int x = Convert.ToInt32(X.Value);

        int y = Convert.ToInt32(Y.Value);



        byte[] CropImage = Crop(path + ImageName, w, h, x, y);

        using (MemoryStream ms = new MemoryStream(CropImage, 0, CropImage.Length))
        {

            ms.Write(CropImage, 0, CropImage.Length);

            using (SD.Image CroppedImage = SD.Image.FromStream(ms, true))
            {

                string SaveTo = path + "crop" + ImageName;

                CroppedImage.Save(SaveTo, CroppedImage.RawFormat);

                pnlCrop.Visible = false;

                pnlCropped.Visible = true;

                imgCropped.ImageUrl = "images/crop" + ImageName;

            }

        }
    }

    private byte[] Crop(string Img, int Width, int Height, int X, int Y)
    {
        try
        {

            using (SD.Image OriginalImage = SD.Image.FromFile(Img))
            {

                using (SD.Bitmap bmp = new SD.Bitmap(Width, Height))
                {

                    bmp.SetResolution(OriginalImage.HorizontalResolution, OriginalImage.VerticalResolution);

                    using (SD.Graphics Graphic = SD.Graphics.FromImage(bmp))
                    {

                        Graphic.SmoothingMode = SmoothingMode.AntiAlias;

                        Graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;

                        Graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;

                        Graphic.DrawImage(OriginalImage, new SD.Rectangle(0, 0, Width, Height), X, Y, Width, Height, SD.GraphicsUnit.Pixel);

                        MemoryStream ms = new MemoryStream();

                        bmp.Save(ms, OriginalImage.RawFormat);

                        return ms.GetBuffer();

                    }

                }

            }

        }

        catch (Exception Ex)
        {

            throw (Ex);

        }
    }
}

Kodlarını Ekleyin. Umarım Yararlı Olmuştur. Sağlıcakla

Paylaş:



4 Yorum :
  1. kullanılan resmin uzantısı .gif olduğunda sorun yaşanıyor, jpg uzantılı bir resimde sorun yok bunu nasıl düzeltiriz?
    Visual Basic kulanarak yapmıştım ben ve tam olarak şurda patlıyor
    Dim image As Bitmap = Bitmap.FromFile(Server.MapPath(Image3.ImageUrl))
    Dim bmp As New Bitmap(w, h, image.PixelFormat)

    Dim g = Graphics.FromImage(bmp)



    indexed pixel format hatası veriyor
    kilic_emre [at] hotmail com

    YanıtlaSil
  2. Gif dosyaları birden fazla resimden oluştuğundan o hatayı verdiğini zannediyorum.Eğer hareketsiz bir gif resmi ise formatını değiştirerek bu sorunun üstünden gelebilirsiniz.Ve ya yüklenen resmin uzantısını kontrol ettirmelisiniz. Ayrıca
    BURADA bulunan makaleyi incelemenizi öneririm.

    YanıtlaSil
  3. merhabalar güzel paylaşımınız için teşekkürler.Uyguladım sorun yok fakat ben croplamaya bir uzunluk ve yükseklik sınırlamak istiyorum mesela 900x300 boyutlarında bir yeri alabilir.banne rolrak kullandıracağım banner a tam otursun diye.bunu nasıl sağlayabilirim?resmin üzerine croplamak için geldiğinde direk 900x300 croplama çizgisi gelsin o sadece resmin üzerinde gezdirsin crop alanını istediği yeri belirlesin mümkünmü?

    YanıtlaSil
  4. Neyse onu da hallettim ben js dosyasındaki kodlardan minsize değerine atayarak yapılıyor kurcalayarak buldum herşey için sağolun

    YanıtlaSil