2013-12-21 6 views
1

Как мне подобрать образ для точного размера? Я не хочу искажать изображение, мне нужно поместить его на черный фон, и его нужно сосредоточить, будь то сторона сбоку или сверху вниз. Они изначально крупные изображения, которые мне нужно, чтобы получить до 25 пикселей в ширину на 32 пикселя.Magick ++: Fit image to size

Прямо сейчас я просто проверка по ширине и высоте, и выяснить, какие должны быть изменены:

InitializeMagick(*argv); 
Image img(imgFilename); 
// Check image dimensions 
if (img.columns() > img.rows()) { 
    // wide image! 
    if (img.columns() > 25) { 
    img.resize(Magick::Geometry("25x")); 
    } 
} else { 
    // tall image! 
    if (img.rows() > 32) { 
    img.resize(Magick::Geometry("x32")); 
    } 
} 

Я должен верить, что есть простой/лучший способ сделать это в то же время подгоняя его к 25px широкий холст 32px с изображением в центре. Как мне это сделать?

Кстати, я понимаю, что есть проблема с указанным выше кодом ... if img.columns() == img.rows() он всегда переходит во второй случай и размер изображения до 32, что isn ' t, так как это приведет к тому, что img.columns() также перейдет к 32, что находится за пределами требуемых 25 пикселей. Это то, что я предполагаю, что подгонка изображения позаботится. Я просто не знаю, как это сделать.

ответ

0

Я считаю, что оценка столбцов изображения & строк может быть ненужной. Magick::Geometry поддерживает дополнительный классификатор (>) «только изменить размер, если изображение больше» и (^) «crop/fill to size». Вы должны иметь возможность использовать комбинацию квалификаторов для изменения размеров изображений, если это необходимо, и для увеличения размера изображения.

img.resize(Magick::Geometry("25x32>^")); 
img.extent(Magick::Geometry("25x32"),Magick::CenterGravity); 

Конечно, вы можете также применять классификаторы в методе extent. Я бы предложил экспериментировать с ними с помощью утилиты convert и example документов.