Lista de todas las opciones de URI del servicio de imágenes de App Engine get_serving_url ()

En respuesta a otra pregunta , un comentarista mencionó una opción de URI no documentada que no conocía para voltear las imágenes horizontal / verticalmente con el servicio de imágenes de App Engine.

La documentación menciona algunas opciones básicas:

  • = s0 – fullsize
  • = s640 – borde más largo 640px largo
  • = s640-c – 640px cuadrado

Sería bueno generar una lista completa de opciones, o si alguien podría proporcionar más opciones que conozcan aquí para servir como documentación de facto.

    Entre leer algunas publicaciones al azar y hacer una investigación de investigación manualmente, he reunido la siguiente lista. Deje caer cualquier otro conocimiento en otras respuestas o en comentarios, y puedo integrarlo aquí.

    Ejemplo de uso

    Podemos efectuar varias transformaciones de imagen atando cadenas al final de una URL de imagen basada en blob de App Engine, siguiendo un carácter =. Las opciones se pueden combinar separándolas con guiones, por ej .:

    http://[image-url]=s200-fh-p-b10-c0xFFFF0000 

    o:

     http://[image-url]=s200-r90-cc-c0xFF00FF00-fSoften=1,20,0: 

    … que tienen el siguiente efecto (documentación a continuación):

    Como ejemplo de lo increíble que es esto, aquí hay un GIF animado, reducido e invertido:

    … que luego podemos convertir en un video MP4 con un parámetro adicional: haga clic para ver la versión MP4


    TAMAÑO / CULTIVO

    • s640 – genera una imagen de 640 píxeles en la dimensión más grande
    • s0 – imagen de tamaño original
    • w100 – genera una imagen de 100 píxeles de ancho
    • h100 – genera una imagen de 100 píxeles de altura
    • s (sin un valor): estira la imagen para adaptarse a las dimensiones
    • c – recorta la imagen a las dimensiones proporcionadas
    • n – igual que c , pero cosechas del centro
    • p – cultivo cuadrado inteligente, bashs de cortar a las caras
    • pp – alternar cultivo cuadrado inteligente, no corta las caras (?)
    • cc – genera una imagen recortada circularmente
    • ci – cuadrado de cultivo al más pequeño de: ancho, alto o parámetro especificado
    • nu – no-upscaling. Desactiva el cambio de tamaño de una imagen a una resolución mayor que su original.

    PAN Y ZOOM

    • x, y, z: – panoramiza y acerca al zoom una imagen embaldosada. Estos no tienen ningún efecto sobre una imagen sin formato o sin un parámetro de autorización de alguna forma (ver googleartproject.com).

    ROTACIÓN

    • fv – voltear verticalmente
    • fh – voltear horizontalmente
    • r {90, 180, 270} – gira la imagen 90, 180 o 270 grados en el sentido de las agujas del reloj

    FORMATO DE IMAGEN

    • rj – fuerza a que la imagen resultante sea JPG
    • rp : fuerza a que la imagen resultante sea PNG
    • rw – fuerza a que la imagen resultante sea WebP
    • rg – fuerza a la imagen resultante a ser GIF

    • v {0,1,2,3} – configura la imagen en una opción de formato diferente (funciona con JPG y WebP)

    Forzar las salidas PNG, WebP y GIF puede funcionar en combinación con cultivos circulares para obtener un fondo transparente. Forzar JPG se puede combinar con el color del borde para rellenar fondos en imágenes transparentes.

    GIF ANIMADOS

    • rh – genera un MP4 a partir de la imagen de entrada
    • k – matar animación (genera imagen estática)

    MISC.

    • b10 – agrega un borde de 10px a la imagen
    • c0xAARRGGBB – establecer el color del borde, ej. = c0xffff0000 para rojo
    • d – agrega encabezado para causar la descarga del navegador
    • e7 – establece el encabezado max-age de control de caché en respuesta a 7 días
    • l100 – establece la calidad JPEG al 100% (1-100)
    • h – responde con una página HTML que contiene la imagen
    • g – responde con XML utilizado por Google pan / zoom

    Filtros

    • fSenvío = 1,100,0: donde 100 puede ir de 0 a 100 para difuminar la imagen
    • fVignette = 1,100,1.4,0000000 donde 100 controla el tamaño del degradado y 000000 es RRGGBB del color de la sombra del borde
    • fInvert = 0,1 invierte la imagen independientemente del valor proporcionado
    • fbw = 0,1 hace que la imagen sea en blanco y negro independientemente del valor proporcionado

    Parámetros desconocidos

    Estos parámetros se han visto en uso, pero su efecto es desconocido: no, nd, mv

    Advertencias

    Algunas opciones (como = l para la calidad JPEG) no parecen generar nuevas imágenes. Si cambia otra opción (tamaño, etc.) y cambia el valor l, el cambio de calidad debería ser visible. Algunas opciones tampoco funcionan bien juntas. Todo esto no está documentado por Google, probablemente con buenas razones.

    Además, probablemente no sea una buena idea depender de cualquiera de estas opciones existentes para siempre. Google podría eliminar la mayoría de ellos sin previo aviso en cualquier momento.

    Investigación detallada de opción v

    Cómo lo descubrí

    ¡Descubrí la opción v realmente involuntariamente!

    Algún día, mientras estaba investigando los encabezados de respuesta de imagen, encontré un atributo etag con valor establecido en v1 . Como todavía no he visto ninguna opción v , intenté agregarla a la URL de la imagen y ¡funcionó! A pesar de que el valor del atributo de encabezado probablemente no tiene nada que ver con la opción v , me ayudó a encontrarlo accidentalmente.

    Investigando cómo funciona el efecto

    En primer lugar, me he dado cuenta de que al establecer v0 y no establecer v obtiene la misma respuesta, lo que indica que v0 devuelve la imagen original sin opción v (al igual que con s0 en la opción s se devolvería el tamaño original).

    Luego, noté que al establecer v1 , v2 y v3 se devolvía progresivamente una imagen con un tamaño de contenido más pequeño (peso), y visualmente se volvió más pobre. Curiosamente, establecer v4 , v5 , etc. no continuó optimizándolo.

    Investigando cuál es el efecto

    Algún otro día probé los mismos parámetros en otra imagen, y descubrí que no pasó nada. Eso fue interesante: una opción que funciona para una imagen y no funciona para otra, así que comencé a probar cuál era la diferencia entre las imágenes. Al revisar la lista de parámetros, se me ocurrió que podría ser el tipo de imagen, ¡y de hecho lo era! El primer tipo de imagen que he probado la opción v fue JPEG, y el segundo fue PNG. Entonces, podría reproducir el mismo efecto configurando el segundo con rj y v3 .

    Por lo tanto, busqué en Internet sobre tipos de JPEG, y curiosamente encontré algunas fonts (como se puede ver aquí , y aquí ) que explican 3 tipos de JPEG: Línea de referencia estándar, Línea de base optimizada y Progresivo, que se ajustan perfectamente a las tres variaciones disponibles en las v opciones!

    Investigando cuando el efecto funciona

    Fui probando la misma opción v en otros tipos de imágenes, y encontré que WebP también admite el mismo tipo de tipo personalizado, también optimiza progresivamente la imagen en peso y calidad (pero mucho menos en calidad que JPEG) en el mismo rango entre v0 y v3 . Lamentablemente, todavía no he encontrado ninguna fuente de diferentes tipos de WebP.

    Además, no cambió nada cuando se usó en GIF, pero, como el tipo PNG, también puede combinar sus opciones con rj y v3 , pero (por supuesto) perderá la animación y la calidad GIF.

    ¡Estuve revisando cosas un día, y luego encontré un recurso de JavaScript en una de las páginas de Google que tenía los nombres de las variables en inglés y sus tipos! Aquí hay una versión muy formateada que hice:

     int: s ==> Size int: w ==> Width bool: c ==> Crop hex: c ==> BorderColor bool: d ==> Download int: h ==> Height bool: s ==> Stretch bool: h ==> Html bool: p ==> SmartCrop bool: pa ==> PreserveAspectRatio bool: pd ==> Pad bool: pp ==> SmartCropNoClip bool: pf ==> SmartCropUseFace int: p ==> FocalPlane bool: n ==> CenterCrop int: r ==> Rotate bool: r ==> SkipRefererCheck bool: fh ==> HorizontalFlip bool: fv ==> VerticalFlip bool: cc ==> CircleCrop bool: ci ==> ImageCrop bool: o ==> Overlay str: o ==> EncodedObjectId str: j ==> EncodedFrameId int: x ==> TileX int: y ==> TileY int: z ==> TileZoom bool: g ==> TileGeneration bool: fg ==> ForceTileGeneration bool: ft ==> ForceTransformation int: e ==> ExpirationTime str: f ==> ImageFilter bool: k ==> KillAnimation int: k ==> FocusBlur bool: u ==> Unfiltered bool: ut ==> UnfilteredWithTransforms bool: i ==> IncludeMetadata bool: ip ==> IncludePublicMetadata bool: a ==> EsPortraitApprovedOnly int: a ==> SelectFrameint int: m ==> VideoFormat int: vb ==> VideoBegin int: vl ==> VideoLength bool: lf ==> LooseFaceCrop bool: mv ==> MatchVersion bool: id ==> ImageDigest int: ic ==> InternalClient bool: b ==> BypassTakedown int: b ==> BorderSize str: t ==> Token str: nt0 ==> VersionedToken bool: rw ==> RequestWebp bool: rwu ==> RequestWebpUnlessMaybeTransparent bool: rwa ==> RequestAnimatedWebp bool: nw ==> NoWebp bool: rh ==> RequestH264 bool: nc ==> NoCorrectExifOrientation bool: nd ==> NoDefaultImage bool: no ==> NoOverlay str: q ==> QueryString bool: ns ==> NoSilhouette int: l ==> QualityLevel int: v ==> QualityBucket bool: nu ==> NoUpscale bool: rj ==> RequestJpeg bool: rp ==> RequestPng bool: rg ==> RequestGif bool: pg ==> TilePyramidAsProto bool: mo ==> Monogram bool: al ==> Autoloop int: iv ==> ImageVersion int: pi ==> PitchDegrees int: ya ==> YawDegrees int: ro ==> RollDegrees int: fo ==> FovDegrees bool: df ==> DetectFaces str: mm ==> VideoMultiFormat bool: sg ==> StripGoogleData bool: gd ==> PreserveGoogleData bool: fm ==> ForceMonogram int: ba ==> Badge int: br ==> BorderRadius hex: bc ==> BackgroundColor hex: pc ==> PadColor hex: sc ==> SubstitutionColor bool: dv ==> DownloadVideo bool: md ==> MonogramDogfood int: cp ==> ColorProfile bool: sm ==> StripMetadata int: cv ==> FaceCropVersion 

    Notas:

    • bool significa simplemente agregar la variable por sí mismo
    • int significa número después del nombre de la variable
    • cadena significa cadena (potencialmente compleja) después del nombre de la variable
    • hex significa número hexadecimal en formato 0x000000 después del nombre de la variable
    • las variables están separadas por guiones (-)

    Por más triste que sea que te diga, no creo, a menos que estés en Google, que esta documentación sea pública :(.

    Developers.google.com está LLENO de elementos, pero no siempre completos / fáciles de encontrar / comprender. Hasta que Google construya una herramienta pública, tenemos que trabajar con lo que tenemos.