From 653b614611093c6e4d3d2b5e67b75888b09b9542 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Wed, 24 Jan 2024 10:00:37 -0500 Subject: [PATCH] image: Move image saving code into helper function No behavior change. --- Userland/Utilities/image.cpp | 50 ++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/Userland/Utilities/image.cpp b/Userland/Utilities/image.cpp index 4745746c50..f92193167f 100644 --- a/Userland/Utilities/image.cpp +++ b/Userland/Utilities/image.cpp @@ -77,6 +77,33 @@ static ErrorOr> convert_image_profile(LoadedImage& imag return icc_file; } +static ErrorOr save_image(LoadedImage& image, StringView out_path, bool ppm_ascii, u8 jpeg_quality) +{ + auto output_stream = TRY(Core::File::open(out_path, Core::File::OpenMode::Write)); + auto buffered_stream = TRY(Core::OutputBufferedFile::create(move(output_stream))); + + ByteBuffer bytes; + if (out_path.ends_with(".bmp"sv, CaseSensitivity::CaseInsensitive)) { + bytes = TRY(Gfx::BMPWriter::encode(*image.bitmap, { .icc_data = image.icc_data })); + } else if (out_path.ends_with(".png"sv, CaseSensitivity::CaseInsensitive)) { + bytes = TRY(Gfx::PNGWriter::encode(*image.bitmap, { .icc_data = image.icc_data })); + } else if (out_path.ends_with(".ppm"sv, CaseSensitivity::CaseInsensitive)) { + auto const format = ppm_ascii ? Gfx::PortableFormatWriter::Options::Format::ASCII : Gfx::PortableFormatWriter::Options::Format::Raw; + TRY(Gfx::PortableFormatWriter::encode(*buffered_stream, *image.bitmap, { .format = format })); + return {}; + } else if (out_path.ends_with(".jpg"sv, CaseSensitivity::CaseInsensitive) || out_path.ends_with(".jpeg"sv, CaseSensitivity::CaseInsensitive)) { + TRY(Gfx::JPEGWriter::encode(*buffered_stream, *image.bitmap, { .quality = jpeg_quality })); + return {}; + } else if (out_path.ends_with(".qoi"sv, CaseSensitivity::CaseInsensitive)) { + bytes = TRY(Gfx::QOIWriter::encode(*image.bitmap)); + } else { + return Error::from_string_view("can only write .bmp, .png, .ppm, and .qoi"sv); + } + + TRY(buffered_stream->write_until_depleted(bytes)); + return {}; +} + ErrorOr serenity_main(Main::Arguments arguments) { Core::ArgsParser args_parser; @@ -147,28 +174,7 @@ ErrorOr serenity_main(Main::Arguments arguments) if (no_output) return 0; - auto output_stream = TRY(Core::File::open(out_path, Core::File::OpenMode::Write)); - auto buffered_stream = TRY(Core::OutputBufferedFile::create(move(output_stream))); - - ByteBuffer bytes; - if (out_path.ends_with(".bmp"sv, CaseSensitivity::CaseInsensitive)) { - bytes = TRY(Gfx::BMPWriter::encode(*image.bitmap, { .icc_data = image.icc_data })); - } else if (out_path.ends_with(".png"sv, CaseSensitivity::CaseInsensitive)) { - bytes = TRY(Gfx::PNGWriter::encode(*image.bitmap, { .icc_data = image.icc_data })); - } else if (out_path.ends_with(".ppm"sv, CaseSensitivity::CaseInsensitive)) { - auto const format = ppm_ascii ? Gfx::PortableFormatWriter::Options::Format::ASCII : Gfx::PortableFormatWriter::Options::Format::Raw; - TRY(Gfx::PortableFormatWriter::encode(*buffered_stream, *image.bitmap, { .format = format })); - return 0; - } else if (out_path.ends_with(".jpg"sv, CaseSensitivity::CaseInsensitive) || out_path.ends_with(".jpeg"sv, CaseSensitivity::CaseInsensitive)) { - TRY(Gfx::JPEGWriter::encode(*buffered_stream, *image.bitmap, { .quality = quality })); - return 0; - } else if (out_path.ends_with(".qoi"sv, CaseSensitivity::CaseInsensitive)) { - bytes = TRY(Gfx::QOIWriter::encode(*image.bitmap)); - } else { - return Error::from_string_view("can only write .bmp, .png, .ppm, and .qoi"sv); - } - - TRY(buffered_stream->write_until_depleted(bytes)); + TRY(save_image(image, out_path, ppm_ascii, quality)); return 0; }