Compress Images in Ruby

Aspose.Words - Compress Images

To compress images using Aspose.Words Java in Ruby, simply invoke the compress_images() method of CompressImages module.

Ruby Code

def compress_images(doc, srcFileName)
    messageFormat = Rjb::import("java.text.MessageFormat")
    file_size = get_file_size(srcFileName)

    # 220ppi Print - said to be excellent on most printers and screens.

    # 150ppi Screen - said to be good for web pages and projectors.

    # 96ppi Email - said to be good for minimal document size and sharing.
    desiredPpi = 150

    # In Java this seems to be a good compression / quality setting.
    jpegQuality = 90

    # Resample images to desired ppi and save.
    resampler = Rjb::import("com.aspose.words.Resampler").new
    count = resampler.resample(doc, desiredPpi, jpegQuality)
    puts MessageFormat.format("Resampled {0} images.", count)
    if (count != 1) then
         puts "We expected to have only 1 image resampled in this test document!"
    end    
    dstFileName = @data_dir + "TestCompressImages Out.docx"
    doc.save(dstFileName)
    puts messageFormat.format("Saving {0}. Size {1}.", dstFileName, get_file_size(dstFileName))

    # Verify that the first image was compressed by checking the new Ppi.
    dst_doc = Rjb::import("com.aspose.words.Document").new(dstFileName)
    nodeType = Rjb::import("com.aspose.words.NodeType")
    shape = dst_doc.getChild(nodeType.DRAWING_ML, 0, true)
    convertUtil = Rjb::import("com.aspose.words.ConvertUtil")
    imagePpi = shape.getImageData().getImageSize().getWidthPixels() / convertUtil.pointToInch(shape.getSize().getX())
    if (imagePpi < 150) then
        puts "Image was not resampled successfully."
    end
end
def get_file_size(file_name)
    file = Rjb::import("java.io.File").new(file_name)
    return file.length()
end

Download Running Code

Download Compress Images (Aspose.Words) from any of the below mentioned social coding sites: