imagecreatetruecolor терпит неудачу с 1536X1962, но не меньшим уменьшением - PullRequest
1 голос
/ 08 февраля 2010

Я сузил свою проблему, чтобы показать, что размер файла имеет значение. Однако я не знаю, когда файл станет большим. Как я могу поймать ошибку. Файл 1,1 мг приводит к тому, что imagecreatetruecolor освобождается от обязательств, но при обработке файла 688 Кб он просто отлично работает.

Спасибо

Ответы [ 2 ]

1 голос
/ 08 февраля 2010

Из того, что я могу сказать в документации по PHP / GD, эта функция создает 24-битное изображение RGB с черным цветом по умолчанию. Ширина и высота, принимаемые в качестве аргументов, являются целыми числами для размеров в пикселях. Поэтому, чтобы рассчитать размер, вы можете умножить их следующим образом, чтобы определить, виноват ли необработанный образ (до сжатия):

1536 * 1962 = 3,013,632 pixels
3,013,632 * 24 = 72,327,168 bits
72,327,168 / 8 = 9,040,896 bytes

1024 * 768 = 786,432 pixels
786,432 * 24 = 18,874,368 bits
18,874,368 / 8 = 2,359,296 bytes

Мне кажется необычным, что эта функция вызывает проблемы размером 1,1 МБ, но, возможно, вы имеете в виду сжатое изображение, такое как JPG, где фактический необработанный размер может быть намного больше (Как вы можете видеть, «маленькое» изображение размером 1024x768 по-прежнему значительно превышает 1,1 МБ необработанного.)

1 голос
/ 08 февраля 2010

Функция выдаст ошибку, если вы попытаетесь создать слишком большое изображение. Просто подавите ошибку и устраните ее самостоятельно. Например,

$img = @imagecreatetruecolor(100000, 100000);
if ($img === false)
{
    // Handle error
}
...