Не удается сохранить изображение для генерации штрих-кода в ASP.NET Проект C #

#c# #asp.net

#c# #asp.net

Вопрос:

Я пытаюсь сохранить изображение с помощью System.Рисование.Save() и я продолжаю получать недопустимое исключение параметра.

Может кто-нибудь, пожалуйста, взглянуть на мой код и сказать мне, что я делаю не так.

Вот код, который генерирует изображение штрих-кода.

  public class BarcodeHelper
    {
        Font barcodeFont;
        public BarcodeHelper()
        {
             PrivateFontCollection fonts;
             FontFamily family = LoadFontFamily("~/../fonts/Code128bWin.ttf", out fonts);   
             barcodeFont = new Font(family, 20.0f);   

            // when done:   
            barcodeFont.Dispose();   
            family.Dispose();   
            family.Dispose();
        }
        public FontFamily LoadFontFamily(string fileName, out PrivateFontCollection fontCollection) 
        { 
            fontCollection = new PrivateFontCollection(); 
            fontCollection.AddFontFile(fileName); 
            return fontCollection.Families[0]; 
        }

        public Image GenerateBarcode(string barcodeText) 
        {
            Image barcodeImage;
            using (barcodeImage = Image.FromFile(@"C:UsersAdministratorDesktopYodelShippingYodelShippingimagesbarcode.bmp"))
            {
                using (Graphics g = Graphics.FromImage(barcodeImage))
                {
                    g.DrawString(barcodeText,
                        new Font(barcodeFont, FontStyle.Bold), Brushes.Black, 
                        barcodeImage.Height /2, barcodeImage.Width / 2);
                }
            }
            return barcodeImage;
        }
    }
  

Здесь я вызываю код для создания и сохранения изображения штрих-кода. Я получаю исключение при вызове метода Save().

 System.Drawing.Image img = barcodeHelper.GenerateBarcode("2lgbub51aj 01000002");
img.Save("~/images/barcode.png");
  

введите описание изображения здесь

Ответ №1:

 protected void Button1_Click(object sender, EventArgs e)
{
    try
    {
        Barcode barcode = new Barcode();
        BarcodeLib.TYPE type = BarcodeLib.TYPE.CODE93;
        BarcodeLib.SaveTypes y = SaveTypes.JPG;
        barcode.Encode(type, "12344");

        barcode.SaveImage(Server.MapPath("~/Barcode\abc.jpg"), y);
                    Label1.Text = "Image Saved successfully";

    }
    catch (Exception EE)
    {
        EE.ToString();
    }
}
  

Ответ №2:

Я думаю, что проблема связана с вашим путем к файлу («~/images/barcode.png»). Вам необходимо использовать действительный абсолютный путь (например, «c:/projects/myproject/images/barcode.png «).

Редактировать: я только что заметил, что это ASP.NET , так что вам нужно будет только сделать это:

 img.Save(Server.MapPath("~/images/barcode.png"));
  

Обратите внимание, что в какой-то момент вы, вероятно, столкнетесь с проблемами с разрешениями (учетная запись, на которой выполняется ваш ASP.NET приложению потребуются разрешения на запись в этом месте).

Комментарии:

1. Просто попробовал это, и я все еще получаю исключение. Есть идеи?

2. Нет, я немного в тупике. В документах говорится, что «Сохранение изображения в тот же файл, из которого оно было создано, запрещено и вызывает исключение»., но похоже, что ваш оригинал есть barcode.bmp , а нет barcode.png , поэтому он должен работать. Попробуйте сохранить в другом абсолютном местоположении и сохраните его как barcode.bmp (на случай, если оно по какой-либо причине не может быть закодировано в PNG).

3. Вы также можете настроить пользовательскую перегрузку Save , которая принимает формат изображения (поскольку вы конвертируете из BMP в PNG), например: img.Save(Server.MapPath("~/images/barcode.png"), System.Drawing.Imaging.ImageFormat.PNG);

Ответ №3:

  1. Установите ProcMon (бесплатно от Microsoft)
  2. Запустите его и создайте фильтр для пути, содержащего штрих-код.png
  3. Запустите свой код.

Он регистрирует каждый вызов файловой системы и результат (с подробной информацией)

Некоторые идеи

  1. Каталог не существует
  2. У вас нет разрешения

Ответ №4:

Image.Save Методу требуется полный путь. Тильда (~) работает только в ASP.Net . Попробуйте:

 img.Save(HttpContext.Current.Server.MapPath("~/images/barcode.jpg"));
  

Ответ №5:

Я полагаю, что это связано с тем фактом, что вы пытаетесь сохранить относительный путь. Попытка использовать абсолютный путь или получить текущий путь через вызов Environment.CurrentDirectory и добавьте его к вашему пути barcode.png.

Ответ №6:

Я бы проверил, что а) папка images существует там, где вы думаете, и б) что ваш ASP.NET процесс имеет права на запись в него.