Результаты поиска
Эффективное JPEG изменение размера изображения в PHP
Какой самый эффективный способ изменить размер больших изображений в PHP?
В настоящее время я использую функцию GD imagecopyresampled для получения изображений с высоким разрешением и чистого изменения их размера до размера для просмотра в интернете (примерно 700 пикселей в ширину и 700 пикселей в высоту).
Это отлично работает на небольших (менее 2 MB) фотографиях, и вся операция изменения размера занимает меньше секунды на сервере. Однако в конечном итоге сайт будет обслуживать фотографов, которые могут загружать изображения размером до 10 MB (или изображения размером до 5000x4000 пикселей).
Выполнение такого рода операций изменения размера с большими изображениями приводит к увеличению использования памяти с очень большим запасом (большие изображения могут резко увеличить использование памяти для сценария после 80 MB). Есть ли способ сделать эту операцию изменения размера более эффективной? Должен ли я использовать альтернативную библиотеку изображений, такую как ImageMagick ?
Прямо сейчас код изменения размера выглядит примерно так
function makeThumbnail($sourcefile, $endfile, $thumbwidth, $thumbheight, $quality) {
// Takes the sourcefile (path/to/image.jpg) and makes a thumbnail from it
// and places it at endfile (path/to/thumb.jpg).
// Load image and get image size.
$img = imagecreatefromjpeg($sourcefile);
$width = imagesx( $img );
$height = imagesy( $img );
if ($width > $height) {
$newwidth = $thumbwidth;
$divisor = $width / $thumbwidth;
$newheight = floor( $height / $divisor);
} else {
$newheight = $thumbheight;
$divisor = $height / $thumbheight;
$newwidth = floor( $width / $divisor );
}
// Create a new temporary image.
$tmpimg = imagecreatetruecolor( $newwidth, $newheight );
// Copy and resize old image into new image.
imagecopyresampled( $tmpimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height );
// Save thumbnail into a file.
imagejpeg( $tmpimg, $endfile, $quality);
// release the memory
imagedestroy($tmpimg);
imagedestroy($img);
Ошибка отсечения чертежа .Net
Функция GDI+ DrawLines имеет ошибку отсечения, которую можно воспроизвести, выполнив следующий код c#. При выполнении кода появляются два пути строк, которые должны быть идентичными, потому что оба они находятся внутри области отсечения. Но когда область отсечения установлена, один из сегментов линии не рисуется.
protected override void OnPaint(PaintEventArgs e)
{
PointF[] points = new PointF[] { new PointF(73.36f, 196),
new PointF(75.44f, 32),
new PointF(77.52f, 32),
new PointF(79.6f, 196),
new PointF(85.84f, 196) };
Rectangle b = new Rectangle(70, 32, 20, 164);
e.Graphics.SetClip(b);
e.Graphics.DrawLines(Pens.Red, points); // clipped incorrectly
e.Graphics.TranslateTransform(80, 0);
e.Graphics.ResetClip();
e.Graphics.DrawLines(Pens.Red, points);
}
Установка режима антиали на графическом объекте решает эту проблему. Но это не настоящее решение.
Кто-нибудь знает обходной путь?
Какие инструменты вы используете для разработки приложений C++ на Linux?
Я разрабатываю приложения C++ в среде Linux. Инструменты, которые я использую каждый день, включают Eclipse с плагином CDT, gdb и valgrind.
Какие инструменты используют другие люди? Есть ли что-нибудь для Linux, что соперничает с изяществом Microsoft Visual Studio?
Как изменить размер и преобразовать загруженное изображение в PNG с помощью GD?
Я хочу разрешить пользователям загружать изображения типа Аватара в различных форматах (по крайней мере, в форматах GIF, JPEG и PNG ), но сохранить их все как PNG database BLOBs . Если изображения слишком большие, по пикселям, я хочу изменить их размер до DB-вставки.
Что является лучшим способом, чтобы использовать GD, чтобы сделать изменения и преобразования PNG?
Edit: к сожалению, на сервере, который мне нужен, доступен только GD, а не ImageMagick .
Внедрение данных изображения IPTC с PHP GD
Я пытаюсь встроить данные IPTC в изображение JPEG с помощью iptcembed() , но у меня возникли некоторые проблемы.
Я проверил, что это в конечном продукте:
// Embed the IPTC data
$content = iptcembed($data, $path);
// Verify IPTC data is in the end image
$iptc = iptcparse($content);
var_dump($iptc);
Который возвращает введенные теги.
Однако когда я сохраняю и перезагружаю изображение теги не существуют:
// Save the edited image
$im = imagecreatefromstring($content);
imagejpeg($im, 'phplogo-edited.jpg');
imagedestroy($im);
// Get data from the saved image
$image = getimagesize('./phplogo-edited.jpg');
// If APP13/IPTC data exists output it
if(isset($image['APP13']))
{
$iptc = iptcparse($image['APP13']);
print_r($iptc);
}
else
{
// Otherwise tell us what the image *does* contain
// SO: This is what's happening
print_r($image);
}
Так почему же теги не отображаются в сохраненном изображении?
Источник PHP доступен здесь, и соответствующие выходы:
Как сделать так, чтобы PictureBox использовало пересчет ближайших соседей?
Я использую StretchImage, потому что коробка может быть изменена с помощью сплиттеров. Похоже, что по умолчанию используется какая-то гладкая билинейная фильтрация, в результате чего мое изображение становится размытым и имеет муаровые узоры.