Giảm kích thước tệp PNG bằng C#

Giảm kích thước tệp PNG bằng C#

Lưu trữ hệ thống là một chủ đề quan trọng trong thời đại công nghệ hiện đại này. Lượng dữ liệu đang tăng lên mỗi ngày và việc thể hiện trực quan các tệp dữ liệu đã trở nên phổ biến. Tuy nhiên, có nhiều cách để nén định dạng file ảnh nhưng chất lượng hình ảnh không hề bị ảnh hưởng. Do đó, chúng tôi sẽ sử dụng API nén hình ảnh .NET này để nén hình ảnh PNG. Trong bài đăng trên blog này, chúng ta sẽ tìm hiểu cách giảm kích thước tệp PNG bằng C# theo chương trình.

Chúng tôi sẽ đề cập đến các điểm sau trong bài viết này:

Cài đặt API nén hình ảnh

Thư viện này cung cấp nhiều phương thức và thuộc tính để thao tác và xử lý các định dạng tệp hình ảnh khác nhau, chẳng hạn như JPEG, TIFF, v.v. Có hai cách để cài đặt API này vào dự án .NET của bạn.

Do đó, bạn có thể tải xuống tệp DLL hoặc chạy lệnh sau trong trình quản lý gói NuGet.

Install-Package Aspose.Imaging

Cách giảm kích thước tệp PNG bằng C#

Bạn có thể thấy rất nhiều phương thức và thuộc tính tại đây để nén các định dạng tệp hình ảnh. Do đó, chúng tôi sẽ viết các bước và đoạn mã để nén tệp PNG theo chương trình.

Thực hiện theo các bước sau:

  1. Tải hình ảnh PNG nguồn bằng cách gọi phương thức Tải.
  2. Gọi phương thức Save để lưu ảnh nén ở định dạng PNG.
  3. Đặt giá trị của thuộc tính [Progressive]]11 để cho biết liệu PNGOptions này có lũy tiến hay không.
  4. IndexedColor đại diện cho loại màu trong đó mỗi pixel là một chỉ mục bảng màu.
  5. Gán giá trị của CompressionLevel để đặt mức nén tối đa.
  6. Phương thức GetCloseImagePalette sẽ lấy bảng màu từ hình ảnh raster (hình ảnh xếp chồng lên nhau) trong trường hợp hình ảnh không có bảng màu. Trong trường hợp có một bảng màu, nó sẽ được sử dụng thay vì thực hiện các phép tính.
// Tải hình ảnh PNG nguồn bằng cách gọi phương thức Load 
        using (Image image = Image.Load("image.png"))
        {
        // Gọi phương thức Save để lưu ảnh nén ở định dạng PNG  
            image.Save(out.png, new ImageOptions.PngOptions()
            {
            // Đặt giá trị của thuộc tính Progressive cho biết liệu PNGOptions này có lũy tiến hay không.
                Progressive = true,
            // IndexedColor đại diện cho loại màu trong đó mỗi pixel là một chỉ mục bảng màu 
                ColorType = FileFormats.Png.PngColorType.IndexedColor,
            // Gán giá trị CompressionLevel để đặt mức nén tối đa 
                CompressionLevel = 9,
            // Phương thức GetCloseImagePalette sẽ lấy bảng màu từ hình ảnh raster (hình ảnh xếp chồng lên nhau) trong trường hợp hình ảnh không có. Trong trường hợp bảng màu tồn tại, nó sẽ được sử dụng thay vì thực hiện các phép tính. 
                Palette = ColorPaletteHelper.GetCloseImagePalette((RasterImage)image, 256, PaletteMiningMethod.Histogram)
            });
        }

API nén hình ảnh - tùy chọn nâng cao

Trong phần trước, chúng ta đã tìm hiểu cách giảm kích thước tệp PNG bằng C#. Bây giờ, hãy khám phá một số phương pháp và thuộc tính nổi bật khác của API nén hình ảnh này. Trong phần này, chúng tôi sẽ thực hiện lệnh gọi API tùy chỉnh để tạo tệp PNG theo chương trình.

Bạn có thể làm theo các bước và đoạn mã được đề cập bên dưới:

  1. Khởi tạo một thể hiện của lớp PngImage để tạo hình ảnh PNG có kích thước 100x100 px.
  2. Phương thức LinearGradientBrush gói gọn một Brush có độ dốc tuyến tính.
  3. Khởi tạo một phiên bản mới của cấu trúc Điểm với tọa độ đã chỉ định.
  4. Khởi tạo một thể hiện của lớp Graphics đại diện cho đồ họa theo công cụ đồ họa được sử dụng trong tập hợp hiện tại.
  5. Tô màu gradient trong suốt màu xanh lam cho hình ảnh bằng phương thức FillRectangle.
  6. Tạo một đối tượng của lớp PngOptions.
  7. Đặt giá trị của thuộc tính Progressive để cho biết liệu PNGOptions này có lũy tiến hay không.
  8. Bạn có thể đặt độ phân giải ngang và dọc thành 96 pixel mỗi inch bằng cách khởi tạo lớp ResolutionSetting.
  9. Đặt loại màu bằng cách gán giá trị cho thuộc tính ColorType.
  10. Gán giá trị cho thuộc tính CompressionLevel để đặt mức nén tối đa.
  11. Thuộc tính FilterType đặt loại bộ lọc được sử dụng trong quá trình lưu tệp PNG.
  12. Đặt số bit trên mỗi kênh bằng cách gán giá trị cho thuộc tính BitDepth.
  13. Lưu vào một tập tin bằng cách gọi phương thức Save.

    // Khởi tạo một thể hiện của lớp PNGImage để tạo hình ảnh PNG có kích thước 100x100 px. 
    using (Aspose.Imaging.FileFormats.Png.PngImage pngImage = new Aspose.Imaging.FileFormats.Png.PngImage(100, 100))
    {
        // Phương thức LinearGradientBrush đóng gói một Brush với một gradient tuyến tính 
        Aspose.Imaging.Brushes.LinearGradientBrush gradientBrush = new Aspose.Imaging.Brushes.LinearGradientBrush(
                // Khởi tạo một phiên bản mới của cấu trúc Điểm với tọa độ đã chỉ định. 
                new Aspose.Imaging.Point(0, 0),
                new Aspose.Imaging.Point(pngImage.Width, pngImage.Height),
                Aspose.Imaging.Color.Blue,
                Aspose.Imaging.Color.Transparent);
        // Khởi tạo một thể hiện của lớp Graphics đại diện cho đồ họa theo công cụ đồ họa được sử dụng trong tập hợp hiện tại.
        Aspose.Imaging.Graphics graphics = new Aspose.Imaging.Graphics(pngImage);

        // Tô màu cho hình ảnh với độ dốc màu xanh trong suốt bằng phương pháp FillRectangle. 
        graphics.FillRectangle(gradientBrush, pngImage.Bounds);
        // Tạo một đối tượng của lớp PNGOptions 
        Aspose.Imaging.ImageOptions.PngOptions saveOptions = new Aspose.Imaging.ImageOptions.PngOptions();

        // đặt giá trị của thuộc tính Progressive cho biết liệu PNGOptions này có lũy tiến hay không. 
        saveOptions.Progressive = true;

        // Đặt độ phân giải ngang và dọc thành 96 pixel mỗi inch bằng cách khởi tạo lớp Cài đặt độ phân giải. 
        saveOptions.ResolutionSettings = new Aspose.Imaging.ResolutionSetting(96.0, 96.0);

        // đặt loại màu bằng cách gán giá trị cho thuộc tính ColorType.
        saveOptions.ColorType = Imaging.FileFormats.Png.PngColorType.TruecolorWithAlpha;

        // Gán một giá trị cho thuộc tính CompressionLevel để đặt mức nén tối đa. 
        saveOptions.CompressionLevel = 9;

        // Thuộc tính FilterType đặt loại bộ lọc được sử dụng trong quá trình lưu tệp png.
        saveOptions.FilterType = Aspose.Imaging.FileFormats.Png.PngFilterType.Adaptive;

        // đặt số bit trên mỗi kênh bằng cách gán giá trị cho thuộc tính BitDepth.
        saveOptions.BitDepth = 8;

        // Lưu vào một tập tin bằng cách gọi phương thức Save. 
        pngImage.Save( "output.png", saveOptions);
    }

Bạn có thể thấy đầu ra trong hình ảnh dưới đây:

API nén hình ảnh

Nhận giấy phép miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí để dùng thử API mà không bị giới hạn về đánh giá.

Tổng hợp

Chúng ta có thể kết thúc bài viết blog này ở đây. Chúng tôi hy vọng bạn đã học được cách giảm kích thước tệp PNG bằng C# theo chương trình. Ngoài ra, chúng tôi đã thực hiện một số phương pháp nâng cao khác của API nén hình ảnh này, nơi chúng tôi đã tạo tệp PNG được tối ưu hóa. Tuy nhiên, bạn có thể truy cập liên kết này để biết thêm các phương pháp và thuộc tính liên quan đến định dạng tệp PNG. Hơn hết, đừng bỏ qua tài liệu của thư viện .NET này để biết về hệ sinh thái. Chúng tôi sẽ viết về các chủ đề hữu ích khác trong các bài đăng trên blog trong tương lai. Vì vậy, hãy giữ liên lạc với conholdate.com để biết thông tin cập nhật.

Đặt một câu hỏi

Bạn có thể cho chúng tôi biết về các câu hỏi hoặc thắc mắc của bạn trên diễn đàn của chúng tôi.

Câu hỏi thường gặp

Làm cách nào để nén hình ảnh PNG trong C#?

Cài đặt API nén hình ảnh .NET này để nén và thao tác với các định dạng tệp PNG. Nó cung cấp các phương thức và thuộc tính để nén các định dạng tệp hình ảnh phổ biến khác như JPEG, TIFF, v.v.

Làm cách nào để giảm thiểu kích thước tệp hình ảnh cho định dạng PNG?

Phương pháp này cho phép bạn giảm kích thước tệp PNG bằng cách sử dụng C# theo chương trình. Hơn nữa, bạn có thể định cấu hình lệnh gọi API theo yêu cầu của mình.

Làm cách nào để thay đổi kích thước hình ảnh PNG trong ví dụ mã C#?

Hãy theo dõi liên kết này để biết về đoạn mã thay đổi kích thước hình ảnh PNG theo chương trình. API .NET này mạnh mẽ và cung cấp nhiều phương thức và thuộc tính.

Xem thêm