2015-02-07 3 views
0

У меня есть приложение, в котором вы перемещаете изображения в определенных положениях и накладываете их на слой. Его приближение хорошо, но проблема, с которой я продолжаю сталкиваться, - это то, что у многих моих изображений есть белые пробелы вокруг них (они используются для jpg), пробел всегда является шестнадцатеричным пробелом #FFFFFF, поэтому мне было интересно, есть ли способ в объективном -c замаскировать весь шестнадцатеричный код в изображении? Я бы вручную отредактировал изображения, но есть тысячи из них от третьей стороны. Есть идеи?Xcode удаляет цвет из изображения программным путем?

+0

Итак, вы можете преобразовать в цветовое пространство RGBA, а затем изменить все пиксели #FFFFFF, чтобы иметь альфа 0 –

+0

См. Http://stackoverflow.com/questions/12396236/ios-change-the-colors-of- a-uiimage –

+0

http://stackoverflow.com/questions/633722/how-to-make-one-color-transparent-on-a-uiimage –

ответ

3

Я нашел этот удивительный метод here, который можно поместить в текущем файле .h:

+(UIImage *)changeWhiteColorTransparent: (UIImage *)image 
{ 
    CGImageRef rawImageRef=image.CGImage; 

    const float colorMasking[6] = {222, 255, 222, 255, 222, 255}; 

    UIGraphicsBeginImageContext(image.size); 
    CGImageRef maskedImageRef=CGImageCreateWithMaskingColors(rawImageRef, colorMasking); 
    { 
     //if in iphone 
     CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0.0, image.size.height); 
     CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0); 
    } 

    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, image.size.width, image.size.height), maskedImageRef); 
    UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); 
    CGImageRelease(maskedImageRef); 
    UIGraphicsEndImageContext();  
    return result; 
} 

Так просто передать изображение этому методу, как так:

UIImage *newImage = [self changeWhiteColorTransparent: yourOldImage]; 
+0

Удивительно! Мне пришлось сделать функцию частной и изменить несколько вещей, но эта работа так хорошо! Хотел бы я дать вам больше, чем просто вымпел и лучший ответ! – CMOS

+0

@CalvinMoss рад, что я мог бы помочь! – JustAnotherCoder

+0

Для поддержки сетчатки или масштаба изображения замените 'UIGraphicsBeginImageContext (image.size);' с 'UIGraphicsBeginImageContextWithOptions (image.size, NO, image.scale);' – Gomfucius

0

Вы можете использовать ImageMagick-х API удалить одноцветное пространство с краев изображения.

На ImageMagick командной строки, это так же просто, как:

convert input.jpg -trim +repage output.png 

Эта -trim операция будет автоматически удалять пиксельные строки и столбцы, пока он не встречает пиксель, который больше не тот же цвет, крайние строки/столбцы.

Если ваши пиксели не используют точно такие же цвета, вы можете добавить «фактор фаз» с -fuzz X%. Это позволит удалить все пиксели, которые находятся в пределах цветового расстояния X%:

convert input.tiff -trim -fuzz 5% +repage output.gif 
convert input.png -trim -fuzz 9% +repage output.png 

(Как вы можете видеть, тот же команда может автоопределение запрошенные входные и выходные форматы файлов и преобразование между ними тоже, если вам это нужно.)

Обычно, что вы можете достичь с помощью командной строки ImageMagick, вы также можете достичь в своих программах при использовании API.

Вот список со всеми доступными API-интерфейсами.Он содержит ссылки на конкретные веб-ресурсы:

Внимание: Не все эти API, одинаково хорошо развиты, поддерживается или полным.

+0

Привет, Kurt Pfeifle, я работаю с волшебной палочкой, как приложение, используя объективный cI am не удалось реализовать Или использовать эти api, могли бы вы помочь в этом. Можете привести пример приложения. Это будет полезно для сохранения моего времени. –

Смежные вопросы