[Solved] Export to .JPG file does not consider image quality

Creating a macro - Writing a Script - Using the API (OpenOffice Basic, Python, BeanShell, JavaScript)
Post Reply
jimit04
Posts: 3
Joined: Mon Sep 26, 2022 1:16 pm

[Solved] Export to .JPG file does not consider image quality

Post by jimit04 »

 Edit: Split from Problem with export python
You should have your own topic. Please do not post in another's topic unless you are helping to solve their problem for them. 
-- MrProgrammer, forum moderator  

Any chance this problem is now solved?
I'm facing simillar issue, while exporting .JPG file. and mentioned image quality is not being considered. :?: :?: :?: :?: :?: :?:
Last edited by Hagar Delest on Tue Sep 27, 2022 5:46 pm, edited 1 time in total.
Reason: tagged solved.
Jimit Vyas
OpenOffice 4.1 on Windows
ms777
Volunteer
Posts: 177
Joined: Mon Oct 08, 2007 1:33 am

Re: Export to .JPG file does not consider image quality

Post by ms777 »

Please post the code you are using
jimit04
Posts: 3
Joined: Mon Sep 26, 2022 1:16 pm

Re: Export to .JPG file does not consider image quality

Post by jimit04 »

Code: Select all

import uno
import sys
import time
import os
from subprocess import Popen
from com.sun.star.beans import PropertyValue

def get_xExporter():
    localContext = uno.getComponentContext()
    resolver = localContext.ServiceManager.createInstanceWithContext(
        "com.sun.star.bridge.UnoUrlResolver", localContext)
    ctx = resolver.resolve(f"uno:{socket}.ComponentContext")
    smgr = ctx.ServiceManager
    xExporter = smgr.createInstance("com.sun.star.drawing.GraphicExportFilter")
    return xExporter

def ExportJPEG(xExporter, slide, sURL):
    PixelHeight = slide.Height
    PixelWidth = slide.Width
    filterData = []
    filterData.append(PropertyValue("PixelWidth",0,PixelWidth,0))
    filterData.append(PropertyValue("PixelHeight",0,PixelHeight,0))
    filterData.append(PropertyValue("Quality",0,99,0))
    filterData.append(PropertyValue("ColorMode",0,1,0))
    writeJPEG = []
    writeJPEG.append(PropertyValue("MediaType", 0, "image/jpeg",0))
    writeJPEG.append(PropertyValue("URL", 0, sURL,0))
    writeJPEG.append(PropertyValue("Overwrite", 0, True, 0))
    writeJPEG.append(PropertyValue("Filterdata",0,tuple(filterData),0))
    xExporter.setSourceDocument(slide)
    xExporter.filter(tuple(writeJPEG))

localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(
    "com.sun.star.bridge.UnoUrlResolver", localContext)
ctx = resolver.resolve(f"uno:{socket}.ComponentContext")
smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)

fileProps = (PropertyValue( "MacroExecutionMode", 0, 4, 0),
                PropertyValue( "Hidden", 0, True, 0 ))

fileURL = uno.systemPathToFileUrl(file)

document = desktop.loadComponentFromURL(fileURL, "_default",0,fileProps)
slides = document.getDrawPages()

xExporter = get_xExporter()
sURL = uno.systemPathToFileUrl(outPath)+"/Slide0.JPG"

ExportJPEG(xExporter, slide, sURL)

this is able to save image but can not change any property of the image.
Jimit Vyas
OpenOffice 4.1 on Windows
ms777
Volunteer
Posts: 177
Joined: Mon Oct 08, 2007 1:33 am

Re: Export to .JPG file does not consider image quality

Post by ms777 »

... that was a tough one ...

There were two issues with your code. (i) PixelWidth/PixelHeight is way too large for the GraphicExporter, and (ii) you have to do some forced type conversion when passing the FilterData. See the comments in the code

Good luck,

ms777

Code: Select all

import uno
import sys
import time
import os
from subprocess import Popen
from com.sun.star.beans import PropertyValue #type:ignore

def ExportJPEG(xExporter, slide, sURL, quality):
    PixelHeight = slide.Height
    PixelWidth = slide.Width
    print(PixelHeight)
    print(PixelWidth)
    filterData = (
# PixelWidth / PixelHeight is 29700 / 21000 on my computer. This seems to be too high for the exporter. 
        PropertyValue("PixelWidth",0,PixelWidth/10,0), 
        PropertyValue("PixelHeight",0,PixelHeight/10,0), 
        PropertyValue("Quality",0,quality,0), 
        PropertyValue("ColorMode",0,1,0)
    )
    writeJPEG = (PropertyValue("MediaType", 0, "image/jpeg",0),
        PropertyValue("URL", 0, sURL,0),
        PropertyValue("Overwrite", 0, True, 0),
#        PropertyValue("FilterData",0, filterData,0) # this does not work
        PropertyValue("FilterData",0,uno.Any("[]com.sun.star.beans.PropertyValue", filterData),0)
    )
    xExporter.setSourceDocument(slide)
    xExporter.filter(writeJPEG)

lo_proc = Popen('"C:\Program Files (x86)\OpenOffice 4\program\soffice.exe" -accept=socket,host=localhost,port=2002;urp;', shell=True)

localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)
ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)

fileProps = (PropertyValue( "MacroExecutionMode", 0, 4, 0), PropertyValue( "Hidden", 0, False, 0 ))

file = "C:\Users\Martin\Desktop\ExportJpg.odg"
fileURL = uno.systemPathToFileUrl(file)

document = desktop.loadComponentFromURL(fileURL, "_default",0,fileProps)
slides = document.getDrawPages()

xExporter = smgr.createInstance("com.sun.star.drawing.GraphicExportFilter")
sURL1 = uno.systemPathToFileUrl("C:\Users\Martin\Desktop")+"/Slide1.JPG"
sURL2 = uno.systemPathToFileUrl("C:\Users\Martin\Desktop")+"/Slide2.JPG"

ExportJPEG(xExporter, slides.getByIndex(0), sURL1, 100)
ExportJPEG(xExporter, slides.getByIndex(0), sURL2, 10)

lo_proc.wait()
jimit04
Posts: 3
Joined: Mon Sep 26, 2022 1:16 pm

Re: Export to .JPG file does not consider image quality

Post by jimit04 »

That does the Job. Thanks man. :bravo: :bravo: :bravo:
Jimit Vyas
OpenOffice 4.1 on Windows
Post Reply