> ## 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 uma imagem

> Redimensione uma imagem para as dimensões de redes sociais, adicione marcas d'água ou corte

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} />

As redes sociais têm [requisitos específicos](/media-guidelines) para imagens. O endpoint de redimensionamento permite escolher um tamanho de imagem compatível com a rede social, adicionar marcas d'água, alterar fundos, adicionar efeitos, cortar e muito mais.

Por padrão, o redimensionamento altera as dimensões de uma imagem, mas não corta a imagem. Você também pode cortar a imagem. Veja abaixo os detalhes.

## Parâmetros do header

<HeaderAPI noProfileKey={true} />

## Parâmetros do body

<ParamField body="imageUrl" type="string" required>
  URL da imagem a ser redimensionada. Deve começar com `https://`
</ParamField>

<ParamField body="platform" type="array" required>
  Plataforma de rede social para a qual a URL será redimensionada. Veja as [opções de
  plataforma](/apis/media/resize#platform-options) para detalhes.
</ParamField>

<ParamField body="file" type="object">
  Envie o arquivo de mídia como um objeto multipart form-data. Obrigatório se `imageUrl` não estiver presente.
</ParamField>

<ParamField body="watermark" type="object">
  URL e posição opcional da marca d'água a ser aplicada à imagem redimensionada. A marca d'água aparecerá
  no canto inferior direito da imagem por padrão. Veja [watermark](/apis/media/resize#watermark)
  para detalhes.
</ParamField>

<ParamField body="effects" type="string">
  Altera opacidade, cores, etc. Veja as [opções de efeitos](/apis/media/resize#effects-options) para
  detalhes.
</ParamField>

<ParamField body="dimensions" type="object">
  Objeto especificando `width` e `height` para redimensionamento. Ao cortar, você pode opcionalmente especificar as coordenadas centrais `x` e `y`.
  O padrão é o centro da imagem.

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

  <Note>Largura e altura obrigatórias se a plataforma não for especificada.</Note>
</ParamField>

<ParamField body="mode" type="string" default="resize">
  Valor: `resize`, `blur` ou `crop`. Veja [mode](/apis/media/resize#mode) para detalhes.
</ParamField>

<ParamField body="convertToJpg" type="boolean">
  Converte automaticamente para um arquivo JPG, como de um PNG para um arquivo JPG. Será utilizada a qualidade de 75%.
  Veja [converter para JPG](/apis/media/resize#convert-to-a-jpg-or-webp) para detalhes.
</ParamField>

<ParamField body="convertToWebP" type="boolean">
  Converte automaticamente para um arquivo WebP, como de um PNG para um arquivo WebP. Será utilizada a qualidade de 75%.
  Veja [converter para WebP](/apis/media/resize#convert-to-a-jpg-or-webp) para detalhes.
</ParamField>

### Opções de plataforma

Especifique uma plataforma como uma String para usar as dimensões predefinidas da imagem, ou especifique as suas próprias com o campo `dimensions`.

Por exemplo, `"platform": "facebook"` definirá as dimensões da imagem como largura 1200px e altura 630px.

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

Observe que o redimensionamento para essas dimensões não cortará a imagem.
Se quiser cortar a imagem, você pode usar o parâmetro `mode` definido como `crop` com os campos `dimensions` e `xCoordinate` e `yCoordinate`.

### Mode

#### Resize

Resize é o modo padrão que altera as dimensões de uma imagem mantendo sua proporção.
Redimensiona a imagem para as dimensões especificadas sem cortar qualquer conteúdo.

Exemplo de JSON:

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

Você também pode especificar dimensões personalizadas usando o campo `dimensions`:

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

É necessário especificar `platform` ou os campos `width` e `height` em `dimensions`.

#### Crop

Crop irá cortar ("crop") a imagem para as dimensões especificadas. Por padrão, a coordenada central será o centro da imagem. Você também pode especificar suas próprias coordenadas x/y.

Exemplo de JSON:

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

Você também pode especificar dimensões personalizadas e coordenadas de corte opcionais usando o 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
  }
}
```

É necessário especificar `platform` ou os campos `width` e `height` em `dimensions`.

Para cortes quadrados, se `width` ou `height` forem menores que as dimensões da imagem fornecida, o menor valor entre `width` ou `height` será usado. Por exemplo, se a imagem for 1200x800 e o corte solicitado for 1080x1080, a imagem retornada será 800x800.

#### Blur

O efeito blur duplica a imagem como fundo e desfoca a imagem.

Exemplo de JSON de blur:

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

Exemplo de imagem com 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

#### Visão geral do watermark

Você pode adicionar uma marca d'água à imagem fornecendo uma URL, que deve começar com `https://` e uma posição opcional.
A marca d'água aparecerá por padrão no canto inferior direito da imagem - `southeast`.

Recomendamos um PNG com fundo transparente.

Exemplo de 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
  }
}
```

Exemplo de imagem com watermark na posição 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" />

#### Posição do watermark

A posição da marca d'água pode ser uma das seguintes:

<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>

### Opções de efeitos

#### Cor em hexadecimal

Valor hexadecimal da cor do fundo para blur. Aplicável somente se `"mode": "blur"`. Valor de string, ex.: `"#A020F0"`

Exemplo de JSON de fundo com cor:

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

Exemplo de imagem com fundo colorido:

<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" />

#### Cor: Grayscale, Sepia, Invert

Você pode alterar a cor primária da imagem especificando `grayscale`, `sepia` ou `invert`. O campo `"blur": true` não é obrigatório e não deve ser usado se você não quiser um fundo.

Exemplo de JSON de grayscale:

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

Exemplo de imagem em grayscale:

<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" />

#### Opacidade

Defina a opacidade da imagem. Valor numérico entre 0 e 1.

Exemplo de JSON de opacidade:

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

#### Quality

Para imagens JPG ou JPEG, especifique a qualidade, ou quantidade de compressão, da imagem.
Quanto menor o número, maior a compressão, porém menor a qualidade da imagem.
Quanto maior o número, menor a compressão, porém maior a qualidade da imagem. Valor numérico entre 0 e 100.

Exemplo de JSON de quality:

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

### Converter para JPG ou WebP

As opções `convertToJpg` e `convertToWebP` permitem transformar imagens do seu formato original (como PNG) para o formato JPG ou WebP, respectivamente.
Por padrão, as imagens convertidas terão qualidade de 75%.

Você pode personalizar o nível de compressão usando o parâmetro [quality](/apis/media/resize#quality) no objeto effects.

Observe que, se sua imagem de origem já for um JPG e você usar `convertToJpg`, a API simplesmente redimensionará a imagem para as dimensões especificadas sem alterar o formato.

Exemplo de conversão para JPG:

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

Exemplo de conversão para 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>
