Ritagliare immagini in maniera personalizzata

From The Document Foundation Wiki
Jump to navigation Jump to search
This page is a translated version of the page Macros/Impress/003 and the translation is 100% complete.
Other languages:
English • ‎italiano

Descrizione

Questa macro permette di automatizzare il ritaglio delle immagini in modo personalizzabile. A tal fine, tra le altre cose fa uso di com.sun.star.text.GraphicCrop.[1] Fate attenzione che semplicemente modificando il .GraphicCrop di un'immagine l'esecuzione non avviene in modo fluido, perciò la macro qui sotto regola la posizione e le dimensioni dell'immagine in modo che questa, al termine dell'esecuzione della macro, risulti statica e non compressa o allungata. La macro è anche progettata per tener conto dei valori di ritaglio precedentemente applicati all'immagine, in modo da poterla eseguire più volte sulla stessa immagine.

Prestate attenzione al fatto che la principale caratteristica che manca a questa macro è che l'immagine deve avere le sue dimensioni originarie per evitare che l'esecuzione della macro comporti la sua compressione/allungamento. (Se trovate una soluzione che permetta di modificare le sue dimensioni, sentitevi liberi di modificare questa pagina del wiki.) Diffidate anche quando incollate delle immagini le cui dimensioni in pixel sono più grandi di quelle della diapositiva stessa, questa verrà automaticamente compressa, il che comporterà un allungamento dell'immagine quando eseguite la macro.

Codice

LibreOffice Basic

'Option Explicit

Sub custom_crop()
    '''Applica un ritaglio personalizzato all'immagine selezionata.'''

    Dim oGC   As New com.sun.star.text.GraphicCrop
    Dim oPos  As New com.sun.star.awt.Point
    Dim oSize As New com.sun.star.awt.Size

    oImage = ThisComponent.CurrentSelection(0)
    x = oImage.getPosition().X
    y = oImage.getPosition().Y
    w = oImage.getSize().Width
    h = oImage.getSize().Height

    ' Specifica i parametri per il ritaglio.
    leftCrop = 3000
    rightCrop = 0
    topCrop = 0
    bottomCrop = 0

    ' Applica il ritaglio all'immagine in modo da tener conto dei valori del precedente ritaglio.
    oGC.Left   = leftCrop   + oImage.GraphicCrop.Left
    oGC.Right  = rightCrop  + oImage.GraphicCrop.Right
    oGC.Top    = topCrop    + oImage.GraphicCrop.Top
    oGC.Bottom = bottomCrop + oImage.GraphicCrop.Bottom
    oImage.GraphicCrop = oGC

    ' Regola la posizione e le dimensioni dell'immagine in modo che questa non si sposti o che non venga allungata/compressa dal procedimento di ritaglio.
    ' (Fate attenzione che, affinché questo funzioni, l'immagine deve avere le sue dimensioni originarie.)
    oPos.X = x + leftCrop
    oPos.Y = y + topCrop
    oSize.Width  = w - leftCrop - rightCrop
    oSize.Height = h - topCrop  - bottomCrop
    oImage.setPosition(oPos)
    oImage.setSize(oSize)

End Sub ' custom_crop()

Python

da completare

Download ODP file

Note