> ## Documentation Index
> Fetch the complete documentation index at: https://www.ayrshare.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Redimensionar una imagen

> Redimensiona una imagen a las dimensiones de redes sociales, agrega marcas de agua o recorta

export const HeaderAPI = ({noProfileKey, profileKeyRequired}) => <>
    <ParamField header="Authorization" type="string" required>
      <a href="/apis/overview#authorization">API Key</a> of the Primary Profile.
      <br />
      <br />
      Format: <code>Authorization: Bearer API_KEY</code>
    </ParamField>
    {!noProfileKey && (profileKeyRequired ? <ParamField header="Profile-Key" type="string" required>
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField> : <ParamField header="Profile-Key" type="string">
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField>)}
  </>;

export const PlansAvailable = ({plans = [], maxPackRequired}) => {
  let displayPlans = plans;
  if (plans && plans.length === 1) {
    const lowerCasePlan = plans[0].toLowerCase();
    if (lowerCasePlan === "business") {
      displayPlans = ["Launch", "Business", "Enterprise"];
    } else if (lowerCasePlan === "premium") {
      displayPlans = ["Premium", "Launch", "Business", "Enterprise"];
    }
  }
  return <Note>
Available on {displayPlans.length === 1 ? "the " : ""}
{displayPlans.join(", ").replace(/\b\w/g, l => l.toUpperCase())}{" "}
{displayPlans.length > 1 ? "plans" : "plan"}.

{maxPackRequired && <span onClick={() => window.open('https://www.ayrshare.com/docs/additional/maxpack', '_self')} className="flex items-center mt-2 cursor-pointer">
 <span className="px-1.5 py-0.5 rounded text-sm" style={{
    backgroundColor: '#C264B6',
    color: 'white',
    fontSize: '12px'
  }}>
   Max Pack required
 </span>
</span>}
</Note>;
};

<PlansAvailable plans={["premium"]} maxPackRequired={true} />

Las redes sociales tienen [requisitos específicos](/media-guidelines) para las imágenes en redes sociales. El endpoint de redimensionamiento te permite elegir un tamaño de imagen compatible con la red social, agregar marcas de agua, cambiar fondos, agregar efectos, recortar y más.

Por defecto, el redimensionamiento cambia las dimensiones de una imagen, pero no la recorta. También puedes optar por recortar la imagen. Consulta los detalles más abajo.

## Parámetros del header

<HeaderAPI noProfileKey={true} />

## Parámetros del body

<ParamField body="imageUrl" type="string" required>
  URL de la imagen que se va a redimensionar. Debe comenzar con `https://`
</ParamField>

<ParamField body="platform" type="array" required>
  Plataforma de redes sociales para la que se redimensionará la URL. Consulta las [opciones de plataforma](/apis/media/resize#platform-options) para más detalles.
</ParamField>

<ParamField body="file" type="object">
  Envía el archivo de medio como un objeto multipart form-data. Obligatorio si `imageUrl` no está presente.
</ParamField>

<ParamField body="watermark" type="object">
  URL y posición opcional de la marca de agua que se aplicará a la imagen redimensionada. Por defecto, la marca de agua aparecerá
  en la esquina inferior derecha de la imagen. Consulta [watermark](/apis/media/resize#watermark)
  para más detalles.
</ParamField>

<ParamField body="effects" type="string">
  Cambia opacidad, colores, etc. Consulta las [opciones de effects](/apis/media/resize#effects-options) para más detalles.
</ParamField>

<ParamField body="dimensions" type="object">
  Objeto que especifica `width` y `height` para el redimensionamiento. Si estás recortando, opcionalmente puedes especificar las coordenadas centrales `x` e `y`.
  El valor predeterminado es el centro de la imagen.

  ```json Dimensions theme={"system"}
  {
    "width": 500,
    "height": 500,
    "xCoordinate": 35, // optional for crop mode
    "yCoordinate": 50 // optional for crop mode
  }
  ```

  <Note>Se requieren width y height si no se especifica la plataforma.</Note>
</ParamField>

<ParamField body="mode" type="string" default="resize">
  Valor: `resize`, `blur` o `crop`. Consulta [mode](/apis/media/resize#mode) para más detalles.
</ParamField>

<ParamField body="convertToJpg" type="boolean">
  Convierte automáticamente a un archivo JPG, por ejemplo de PNG a JPG. Se usa una calidad del 75 %.
  Consulta [convertir a JPG](/apis/media/resize#convert-to-a-jpg-or-webp) para más detalles.
</ParamField>

<ParamField body="convertToWebP" type="boolean">
  Convierte automáticamente a un archivo WebP, por ejemplo de PNG a WebP. Se usa una calidad del 75 %.
  Consulta [convertir a WebP](/apis/media/resize#convert-to-a-jpg-or-webp) para más detalles.
</ParamField>

### Opciones de plataforma

Especifica una plataforma como String para usar dimensiones predefinidas de la imagen, o puedes indicar las tuyas propias con el campo `dimensions`.

Por ejemplo, `"platform": "facebook"` establecerá las dimensiones de la imagen en 1200 px de ancho y 630 px de alto.

<ul class="custom-bullets">
  <li>`facebook`: 1200 px de ancho, 630 px de alto.</li>
  <li>`instagram`: 1080 px de ancho, 1080 px de alto.</li>
  <li>`instagram_landscape`: 1080 px de ancho, 680 px de alto.</li>
  <li>`instagram_portrait`: 1080 px de ancho, 1920 px de alto.</li>
  <li>`instagram_special`: 1080 px de ancho, 800 px de alto.</li>
  <li>`linkedin`: 1200 px de ancho, 627 px de alto.</li>
  <li>`pinterest`: 1080 px de ancho, 1920 px de alto.</li>
  <li>`tiktok`: 1080 px de ancho, 1920 px de alto.</li>
  <li>`twitter`: 1600 px de ancho, 900 px de alto.</li>
</ul>

Ten en cuenta que el redimensionamiento a estas dimensiones no recortará la imagen.
Si quieres recortar la imagen, puedes usar el parámetro `mode` con el valor `crop` junto con los campos `dimensions`, `xCoordinate` e `yCoordinate`.

### Mode

#### Resize

Resize es el modo predeterminado que cambia las dimensiones de una imagen manteniendo su relación de aspecto.
Redimensiona la imagen a las dimensiones especificadas sin recortar contenido.

Ejemplo JSON:

```json Resize theme={"system"}
{
  "mediaUrl": "https://img.ayrshare.com/012/gb.jpg",
  "platform": "instagram",
  "mode": "resize"
}
```

También puedes especificar dimensiones personalizadas usando el campo `dimensions`:

```json Resize with Dimensions theme={"system"}
{
  "mediaUrl": "https://img.ayrshare.com/012/gb.jpg",
  "mode": "resize",
  "dimensions": {
    "width": 800,
    "height": 600
  }
}
```

Debes especificar o bien el campo `platform` o bien los campos `width` y `height` de `dimensions`.

#### Crop

Crop cortará ("recortará") la imagen a las dimensiones especificadas. Por defecto, la coordenada central será el centro de la imagen. También puedes especificar tus propias coordenadas x/y.

Ejemplo JSON:

```json Crop theme={"system"}
{
  "mediaUrl": "https://img.ayrshare.com/012/gb.jpg",
  "platform": "instagram",
  "mode": "crop"
}
```

También puedes especificar dimensiones personalizadas y coordenadas de recorte opcionales usando el campo `dimensions`:

```json Crop with Dimensions theme={"system"}
{
  "mediaUrl": "https://img.ayrshare.com/012/gb.jpg",
  "mode": "crop",
  "dimensions": {
    "width": 1080,
    "height": 1080,
    "xCoordinate": 35,
    "yCoordinate": 50
  }
}
```

Debes especificar o bien el campo `platform` o bien los campos `width` y `height` de `dimensions`.

Para recortes cuadrados, si `width` o `height` son menores que las dimensiones de la imagen proporcionada, se usará el menor entre `width` o `height`. Por ejemplo, si la imagen es de 1200x800 y el recorte solicitado es de 1080x1080, la imagen devuelta será de 800x800.

#### Blur

El efecto de desenfoque duplica la imagen como fondo y la difumina.

Ejemplo JSON de blur:

```json Blur theme={"system"}
{
  "mediaUrl": "https://img.ayrshare.com/012/gb.jpg",
  "platform": "instagram",
  "mode": "blur"
}
```

Ejemplo de imagen con blur:

<img src="https://mintcdn.com/ayrshare-docs/Nmrhj2Gh7WSf62Bh/images/apis/media/blur.webp?fit=max&auto=format&n=Nmrhj2Gh7WSf62Bh&q=85&s=8877f9f348f319fc683bc7928d767dbb" alt="Background with Blur" width="1080" height="1080" data-path="images/apis/media/blur.webp" />

### Watermark

#### Descripción general de la marca de agua

Puedes agregar una marca de agua a la imagen proporcionando una URL, que debe comenzar con `https://`, y una posición opcional.
Por defecto, la marca de agua aparecerá en la esquina inferior derecha de la imagen: `southeast`.

Recomendamos usar un PNG con fondo transparente.

Ejemplo JSON de watermark:

```json Watermark theme={"system"}
{
  "mediaUrl": "https://img.ayrshare.com/random/photo-13.jpg",
  "platform": "instagram",
  "watermark": {
    "url": "https://img.ayrshare.com/012/100-percent.png",
    "position": "northeast" // optional
  }
}
```

Ejemplo de imagen con marca de agua en la posición southeast:

<img src="https://mintcdn.com/ayrshare-docs/Nmrhj2Gh7WSf62Bh/images/apis/media/watermark.webp?fit=max&auto=format&n=Nmrhj2Gh7WSf62Bh&q=85&s=7794b66e76cfa988131ab99232af9081" alt="Add Watermark" width="1080" height="1080" data-path="images/apis/media/watermark.webp" />

#### Posición de la marca de agua

La posición de la marca de agua puede ser una de las siguientes:

<ul class="custom-bullets">
  <li>`north`</li>
  <li>`northeast`</li>
  <li>`east`</li>
  <li>`southeast`</li>
  <li>`south`</li>
  <li>`southwest`</li>
  <li>`west`</li>
  <li>`northwest`</li>
  <li>`center`</li>
</ul>

### Opciones de effects

#### Color hexadecimal

Valor hexadecimal para el color del fondo del desenfoque. Solo aplica si `"mode": "blur"`. Valor de tipo String, p. ej. `"#A020F0"`

Ejemplo JSON de fondo de color:

```json Color Background theme={"system"}
{
  "mediaUrl": "https://img.ayrshare.com/012/gb.jpg",
  "platform": "instagram",
  "mode": "blur",
  "effects": {
    "color": "#A020F0"
  }
}
```

Ejemplo de imagen con fondo de color:

<img src="https://mintcdn.com/ayrshare-docs/Nmrhj2Gh7WSf62Bh/images/apis/media/color-background.webp?fit=max&auto=format&n=Nmrhj2Gh7WSf62Bh&q=85&s=07c06abcfac8e792c361cc8eaa9884a1" alt="Add Colored Background" width="1080" height="1080" data-path="images/apis/media/color-background.webp" />

#### Color: Grayscale, Sepia, Invert

Puedes cambiar el color principal de la imagen especificando `grayscale`, `sepia` o `invert`. El campo `"blur": true` no es obligatorio y no debe usarse si no quieres un fondo.

Ejemplo JSON en escala de grises:

```json Grayscale theme={"system"}
{
  "mediaUrl": "https://img.ayrshare.com/random/photo-13.jpg",
  "platform": "instagram",
  "effects": {
    "color": "grayscale"
  }
}
```

Ejemplo de imagen en escala de grises:

<img src="https://mintcdn.com/ayrshare-docs/Nmrhj2Gh7WSf62Bh/images/apis/media/grayscale.webp?fit=max&auto=format&n=Nmrhj2Gh7WSf62Bh&q=85&s=c654e1485a00be0d421d4ffa19ebfbc7" alt="Add Grayscale" width="1080" height="1080" data-path="images/apis/media/grayscale.webp" />

#### Opacidad

Establece la opacidad de la imagen. Rango de valores numéricos: 0 - 1.

Ejemplo JSON de opacidad:

```json Opacity theme={"system"}
{
  "effects": {
    "opacity": 0.2
  }
}
```

#### Calidad

Para imágenes JPG o JPEG, especifica la calidad o cantidad de compresión de la imagen.
Cuanto menor sea el número, mayor será la compresión, pero menor la calidad de la imagen.
Cuanto mayor sea el número, menor será la compresión, pero mayor la calidad de la imagen. Rango de valores numéricos: 0 - 100.

Ejemplo JSON de calidad:

```json Quality theme={"system"}
{
  "effects": {
    "quality": 20
  }
}
```

### Convertir a JPG o WebP

Las opciones `convertToJpg` y `convertToWebP` te permiten transformar imágenes desde su formato original (como PNG) a formato JPG o WebP, respectivamente.
Por defecto, las imágenes convertidas tendrán una configuración de calidad del 75 %.

Puedes personalizar el nivel de compresión usando el parámetro [quality](/apis/media/resize#quality) dentro del objeto effects.

Ten en cuenta que si tu imagen de origen ya es JPG y usas `convertToJpg`, la API simplemente redimensionará la imagen a las dimensiones especificadas sin cambiar el formato.

Ejemplo de conversión a JPG:

```json Convert to JPG theme={"system"}
{
  "convertToJpg": true
}
```

Ejemplo de conversión a WebP:

```json Convert to WebP theme={"system"}
{
  "convertToWebP": true
}
```

<RequestExample>
  ```bash cURL theme={"system"}
    curl \
    -H "Authorization: Bearer API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{"mediaUrl": "https://img.ayrshare.com/012/gb.jpg", "platform": "instagram"' \
    -X POST https://api.ayrshare.com/api/media/resize
  ```

  ```javascript JavaScript theme={"system"}
  const API_KEY = "API_KEY";

  fetch("https://api.ayrshare.com/api/media/resize", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${API_KEY}`
    },
    body: JSON.stringify({
      mediaUrl: "https://img.ayrshare.com/012/gb.jpg", // required
      platform: "instagram"
    })
  })
    .then((res) => res.json())
    .then((json) => console.log(json))
    .catch(console.error);
  ```

  ```python Python theme={"system"}
  import requests

  payload = {'mediaUrl': 'https://img.ayrshare.com/012/gb.jpg',
          'platforms': 'instagram'}
  headers = {'Content-Type': 'application/json',
          'Authorization': 'Bearer API_KEY'}

  r = requests.post('https://api.ayrshare.com/api/media/resize',
      json=payload,
      headers=headers)

  print(r.json())
  ```

  ```php PHP theme={"system"}
  <?php

  $curl = curl_init();
  $data = array (
    "mediaUrl" => "https://img.ayrshare.com/012/gb.jpg",
    "platforms" => "instagram"
  );

  curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://api.ayrshare.com/api/media/resize',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => http_build_query($data),
    CURLOPT_HTTPHEADER => array(
      'Authorization: Bearer API_KEY',
      'Accept-Encoding: gzip'
    ),
  ));

  $response = curl_exec($curl);
  curl_close($curl);
  echo $response;
  ```

  ```csharp C# theme={"system"}
  using System;
  using System.Net.Http;
  using System.Text;
  using System.Text.Json;
  using System.Threading.Tasks;

  public class AyrshareApiClient
  {
      private readonly HttpClient _httpClient;
      private readonly string _apiKey;
      private const string BaseUrl = "https://api.ayrshare.com/api";

      public AyrshareApiClient(string apiKey)
      {
          _apiKey = apiKey ?? throw new ArgumentNullException(nameof(apiKey));
          _httpClient = new HttpClient();
          _httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {_apiKey}");
      }

      public async Task<string> ResizeMediaAsync(string mediaUrl, string platform)
      {
          try
          {
              var requestData = new
              {
                  mediaUrl = mediaUrl,
                  platform = platform
              };

              var content = new StringContent(
                  JsonSerializer.Serialize(requestData),
                  Encoding.UTF8,
                  "application/json"
              );

              var response = await _httpClient.PostAsync($"{BaseUrl}/media/resize", content);
              response.EnsureSuccessStatusCode();

              var jsonResponse = await response.Content.ReadAsStringAsync();
              return jsonResponse;
          }
          catch (HttpRequestException ex)
          {
              throw new Exception($"Failed to resize media: {ex.Message}", ex);
          }
      }

      public void Dispose()
      {
          _httpClient.Dispose();
      }
  }
  ```
</RequestExample>

<ResponseExample>
  ```json 200: Success theme={"system"}
  {
    "status": "success",
    "url": "https://media.ayrshare.com/9abf1426d6ce9122ef11c72bd62e59807c5cc083/8UbyBjHTxgHkAC1I37e6O.jpg",
    "platform": "instagram",
    "mode": "blur",
    "effects": {
      "color": "#A020F0"
    }
  }
  ```

  ```json 400: Failed Resize theme={"system"}
  {
    "action": "resize",
    "status": "error",
    "code": 312,
    "message": "Invalid extension type. Extension: null. Please verify the extension is one of the following: png, jpg, jpeg and the file is accessible."
  }
  ```
</ResponseExample>
