Reflexioné e investigué esto por algún tiempo, y con la ayuda de esta respuesta aquí , he ideado un AppleScriptObjc script que, al menos en High Sierra (pero que también debería funcionar en Mojave ), permite cierta personalización sobre la forma en que la imagen de fondo del escritorio se ajusta a la pantalla (principal):
use framework "AppKit"
--------------------------------------------------------------------------------
# PROPERTY DECLARATIONS:
property this : a reference to current application
property NSWorkspace : a reference to NSWorkspace of this
property NSScreen : a reference to NSScreen of this
property NSColor : a reference to NSColor of this
property NSDictionary : a reference to NSDictionary of this
property fit : 1 -- NSImageScaleAxesIndependently (will never clip)
property centre : 2 -- NSImageScaleNone (will never clip)
property best : 3 -- NSImageScaleProportionallyUpOrDown (no clipping)
property fill : 3.1 -- NSImageScaleProportionallyUpOrDown (clipping)
property black : {0, 0, 0}
property white : {100, 100, 100}
property grey50 : {50, 50, 50}
property red : {100, 0, 0}
property green : {0, 100, 0}
property blue : {0, 0, 100}
--------------------------------------------------------------------------------
# IMPLEMENTATION:
on run
scaleDesktopImage to fill over blue
end run
--------------------------------------------------------------------------------
# HANDLERS:
to scaleDesktopImage to scalingOption over {r, g, b} : {50, 50, 50}
local scalingOption -- fit, centre, fill
local r, g, b -- 0 to 100
set clipping to false
if scalingOption is not in [fit, centre, best, fill] then return false
if scalingOption = fill then set clipping to true
set sharedWorkspace to NSWorkspace's sharedWorkspace()
set mainScreen to NSScreen's mainScreen()
set options to {NSWorkspaceDesktopImageScalingKey:scalingOption ¬
, NSWorkspaceDesktopImageAllowClippingKey:clipping ¬
, NSWorkspaceDesktopImageFillColorKey:RGB(r, g, b)}
set imageURL to sharedWorkspace's desktopImageURLForScreen:mainScreen
set [success, E] to sharedWorkspace's setDesktopImageURL:imageURL ¬
forScreen:mainScreen options:options |error|:(reference)
if E = missing value then return success
E's localizedDescription() as text
end scaleDesktopImage
on RGB(r as real, g as real, b as real)
NSColor's colorWithCalibratedRed:r / 100 ¬
green:g / 100 ¬
blue:b / 100 ¬
alpha:1.0
end RGB
---------------------------------------------------------------------------❮END❯
Si no está familiarizado con AppleScriptObjC, observe que el script está dividido en tres secciones: PROPERTY DECLARATIONS
, IMPLEMENTATION
y HANDLERS
, el primero y el último de los cuales te sugiero que no intentes ajustar demasiado o nada, a menos que sea un ejercicio de aprendizaje.
Dicho esto, estoy seguro de que no te equivocarás si decides agregar tus propias propiedades de color personalizadas a la agrupación en las secciones PROPERTY DECLARATIONS
, cada una de las cuales es simplemente una Lista de 3 elementos que especifica los componentes de color rojo, verde y azul con valores entre 0 (contribución cero) y 100 (contribución completa).
La segunda sección del script, titulada IMPLEMENTATION
, es el bit funcional que contiene el controlador explícitamente declarado (solo por claridad) run
. El comando singular es una llamada al controlador scaleDesktopImage
, que es la línea con la que más desearás jugar para satisfacer tus necesidades.
Toma dos formas, que ilustraré con el ejemplo:
scaleDesktopImage to fill over blue
o:
scaleDesktopImage to fill
En otras palabras, la especificación del color sobre el que se coloca la imagen del escritorio (es decir, el color de fondo) es opcional. Si se omite, el color de fondo toma como valor predeterminado el 50% de gris. Por supuesto, no es necesario usar una propiedad declarada previamente para especificar el color de fondo; puede suministrar directamente una lista de valores RGB:
scaleDesktopImage to best over {100, 25, 50}
El parámetro restante es obligatorio, y hay cuatro valores con nombre posibles:
-
fit
: Estira la imagen para que se ajuste al ancho y la altura del escritorio;
-
centre
: Centra la imagen sin ampliarla, sin embargo reducirá el tamaño de una imagen que de lo contrario se derramaría fuera del límite del escritorio;
-
best
: Amplía o reduce el tamaño de la imagen para ocupar el área máxima posible del escritorio sin salir del límite del escritorio y mantener la relación de aspecto de la imagen, es decir, un ajuste de tamaño proporcional;
-
fill
: dimensiona la imagen para cubrir el área completa del escritorio, conservando la relación de aspecto, pero extendiéndose más allá del límite del escritorio a lo largo de uno de sus ejes si es necesario para cubrir el fondo.