Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 26. 7. 2020 14:54:34

Trambus
Člen
Registrace: 20. 2. 2013
Příspěvků: 50

Kvalita vložených obrázků

Zdravím všechny, po aktualizaci LO na verzi 6.4.0.3 se mi vkládají zkopírované obrázky ze schránky do Writeru s příšernou kvalitou. Hledal jsem někde najaké nastavení kvality, ale nemůžu to najít. Dokázal by mě někdo poradit?

Druhý dotaz je podobný. Kopíruju tabulky z Calcu do Writeru a vkládám je tam jako obrázky - je rozdíl mezi vložením BMP nebo GDI? V nabídce jsou oba smile

Třetí dotaz je vlastně navazující - po nějaké době kdy otevřu soubor ve Writeru jsou obrázky nekvalitní, jakoby se zhoršují postupně. Jak tomu zabránit?

Děkuji za pomoc. Pavel.

Offline

#2 26. 7. 2020 17:04:31

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Kvalita vložených obrázků

Nevím jestli verze 6.4.0.3 je dobrá volba, možná by stálo za to zkusit stáhnout aktuální 6.4.5 nebo z pre-releasů https://dev-builds.libreoffice.org/pre-releases/ 6.4.6.1 jestli to nebude lepší.


ad 1) Libre vkládá obrázky větší jako kdyby jim měnil DPI. Pro originální velikost obrázku ho makrem zmenšuji na 2/3. V posledních verzích se však nějak změnilo vykreslování obrázků a jsou vkládány v poněkud horší kvalitě. Kdysi se mi změnou DPI na 1,5 násobek (převrácená hodnota z 2/3 čili 3/2) podařilo vkládat obrázky stejně ostré, to samé platilo i když se neudělalo zvětšení DPI ale zmenšila se velikost na 2/3, avšak nějakou dobu to zase neplatí :-(.

Nevím jako moc vám to obrázky zhoršuje, u mě zase ne o tolik, ale originální ostrosti jako třeba v Malování nebo při prohlížení v XnView v Libre již nějaký čas nemohu dosáhnout.
Příklad zde: https://uloz.to/file/w6RgkuhkwdXA/obrazky-png


Dále je makro pro vkládání obrázku se změnou jeho velikosti na 2/3, prostě to udělá Ctrl+V a pokud bude vložen textový grafický objekt (obrázek), tak mu to změnší velikost na 2/3. Kdyžtak se tam dá odkomentovat ukotvení či svislé vycentrování, podrobně jsou ty volby popsány zde https://uloz.to/file/M4P0ypuZnPLc/libre … o-znak-pdf.

Sub vlozObr3 'vloží obrázek ze Schránky a zmenší mu velikost na 2/3
	dim oDoc,oSel as object, oImg, document, dispatcher, i%
	dim oSize as new com.sun.star.awt.Size
	oDoc=thisComponent
	document=oDoc.CurrentController.Frame : dispatcher=createUnoService("com.sun.star.frame.DispatchHelper")
	if IsAnythingSelected(oDoc)=true then 'je něco v dokumentu označeno?
		i=msgbox("Něco je označeno, přepsat obrázkem?",19)
		if i=2 then
			exit sub
		elseif i=7 then
			dispatcher.executeDispatch(document, ".uno:Escape", "", 0, array()) 'je-li něco označeno tak odznačit
		end if
	end if
	dispatcher.executeDispatch(document, ".uno:Paste", "", 0, array()) 'Ctrl+V
	oImg=oDoc.currentController.getSelection()
	if oImg.supportsService("com.sun.star.text.TextGraphicObject") then
		oSize=oImg.ActualSize 'původní velikost obrázku
		i=2/3 'koeficinet pro "změnu DPI" aby Libre obrázky nezvětšoval
		oSize.width=oSize.width*i : oSize.height=oSize.height*i
		oImg.Size=oSize 'nastavit přepočtenou velikost
	'	oImg.AnchorType=1 'UKOTVIT JAKO ZNAK =com.sun.star.text.TextContentAnchorType.AS_CHARACTER
	'	oImg.VertOrient=5 'SVISLE NA STŘED ZNAKU =com.sun.star.text.VertOrientation.CHAR_CENTER
	end if
End Sub

rem zdroj: Andrew Pitonyak PDF OpenOffice.org Macros Explained
Function IsAnythingSelected(oDoc As Object) As Boolean 
	Dim oSelections 'Contains all of the selections
	Dim oSel 'Contains one specific selection
	Dim oCursor 'Text cursor to check for a collapsed range
	REM Assume nothing is selected
	IsAnythingSelected = False
	If IsNull(oDoc) Then Exit Function
	' The current selection in the current controller.
	'If there is no current controller, it returns NULL.
	oSelections = oDoc.getCurrentSelection()
	If IsNull(oSelections) Then Exit Function
	If oSelections.getCount() = 0 Then Exit Function
	If oSelections.getCount() > 1 Then
		REM There is more than one selection so return True
		IsAnythingSelected = True
	Else
		REM There is only one selection so obtain the first selection
		oSel = oSelections.getByIndex(0)
		REM Create a text cursor that covers the range and then see if it is
		REM collapsed.
		oCursor = oDoc.Text.CreateTextCursorByRange(oSel)
		If Not oCursor.IsCollapsed() Then IsAnythingSelected = True
	End If
End Function

ad 2) BMP je takovej (tuším microsoftí) primitivně velkej formát pro bitmapové obrázky, myslím že nemá žádnou kompresi; co do velikosti ho trumfne snad jen formát RAW. GDI není bitmapový obrázek ale nějaké objektové vložení dat z Calcu, přesně nevím a nechce se mi dohledávat. Rozdíl byte však měl poznat když si stránku zazoomujete, GDI bude jakožto objekt vykreslován hladce, kdežto BMP vám to zvětší neostře, neb půjde o obrázek.


ad 3) tady by to chtělo ukázku, ale v tom že bych s tím mohl pomoci jsem spíše skeptický. Pokud by nepomohlo to zmenšení obrázků na 2/3 původní velikosti nebo novější verze Libre, tak zatím nevím.

Editoval kamlan (26. 7. 2020 17:05:13)

Offline

#3 27. 7. 2020 07:46:04

Trambus
Člen
Registrace: 20. 2. 2013
Příspěvků: 50

Re: Kvalita vložených obrázků

Kamlane, mockrát děkuji - přeinstalace na novější verzi opravdu pomohla, sice to trosku nechápu proč to ta minulá verze dělala, ale budiž :-)

Offline

#4 27. 7. 2020 09:41:24

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Kvalita vložených obrázků

Chyby: To jsou prostě chyby které vznikají různým rozšiřováním a přeprogramováváním. Libre je velmi velmi obsáhlá aplikace naprogramovaná mnoha mnoha lidmi a nějaká úprava prostě způsobí že to nečekaně koliduje s něčím jiným.


Zkusím vám na tu složitost uvést příklad. Objektově orientované programování se vyznačuje tím, že máte nějakou naprogramovanou strukturu a můžete si z ní udělat kopii a tu poněkud modifikovat pro použití v jiném místě kde vám ty její změny více pomohou; kdežto originál necháte působit na původním místě. No a z té kopie lze udělat další kopii a opět jí modifikovat atd. A takto to jde dělat dál a dál. Děláte si různé kopie různých struktur a různě jim měníte vlastnosti. Říká se tomu dědičnost a polymorfizmus. V lidském světě je to připodobnitelné ke generacím, např. děd má nějaké vlastnosti a ty zdědí i otec i syn (třeba podobnost obličeje) atd. Mohou mít i podobné vlastnosti (třeba v oblibě nějakého jídla), ale v něčem se budou odlišovat. V tom programování to jde dědit klidně na 100+ "generací". No a někdy se stane, že třeba objekt v nové 50-té kopii a s klidně i úplně jinými vlastnostmi v úplně jiné situaci než se kterou kdy bylo počítáno když se začalo kopírovat od 50praděda zakoliduje s nějakým jiným objektem který je třeba v 30-té generaci. No a tím vznikne chyba, kterou si pak třeba někdo všimne a nahlásí ji vývojářům a ti to třeba opraví.

Offline

Zápatí