字体大小以像素为单位字体大小以像素为单位(Font size in pixels)

2019-05-14 02:16发布

在iPhone上如何计算一个字符的像素尺寸为给定的点大小?

Answer 1:

点尺寸被定义为1/72英寸 。 也就是说,一个72磅的字体是从最低下降到最高上升约1英寸。 因此,在一个72pt字体字形的最大高度大约为1英寸。

苹果的iPhone技术规格页声称,iPhone 目前有每英寸163个像素的分辨率。 所以,72分是163个像素,或者每点约2.2639像素。 只要记住,每一个字形高度和宽度不同,所以这是大小的一个非常粗略的估计。 一般来说,之间的距离基线会比字体的点大小稍大,使文本行不会撞上对方。

如果您需要准确的测量(你可能做的),那么你就需要使用字体度量信息实际测量的字体字形。 您可以通过使用做到这一点的NSString的UIKit的增加 ,这将让在屏幕上呈现你衡量一个特定的字符串的大小。



Answer 2:

为了配合与字体大小你有你的Photoshop文档设置为144dpi iPhone4的(以点数)在Photoshop字体大小(以点数)。 我已经运行了一些测试,这就是产生1分辨率:1的结果。

脚步:

  • 就拿“设置»一般»无障碍»大文本”的截图上的iPhone4
  • 在Photoshop中打开屏幕截图
  • 从72dpi的分辨率更改为144dpi用“重定图像像素”
  • 重新输入在Photoshop文字(分)的截图大小相匹配

我已经通过一些不同的分辨率,包括在答复上述163dpi的走了,我发现,144dpi产生1:1的结果。 我还测试这对本机应用程序在那里我知道了点尺寸和144dpi是比赛有太多。



Answer 3:

我们的图形艺术家是在某些设备上使用的像素大小而不是点大小非常具体。 下面的函数将返回基于像素大小的字体。 它采用蛮力方法来查找衣柜字体,但然后缓存结果,以便下一次的回报将是非常快的。 我一直很欣赏这个代码是如何可以作出更好的意见。 我用这个功能在课堂上被称为utils的类的静态成员。 您可以轻松地粘贴到你使用任何类。 希望这是一些帮助。

/** return a font as close to a pixel size as possible
example:
    UIFont *font = [Utils fontWithName:@"HelveticaNeue-Medium" sizeInPixels:33];
 @param fontName name of font same as UIFont fontWithName
 @param sizeInPixels size in pixels for font
 */
+(UIFont *) fontWithName:(NSString *) fontName sizeInPixels:(CGFloat) pixels {
    static NSMutableDictionary *fontDict; // to hold the font dictionary
    if ( fontName == nil ) {
        // we default to @"HelveticaNeue-Medium" for our default font
        fontName = @"HelveticaNeue-Medium";
    }
    if ( fontDict == nil ) {
        fontDict = [ @{} mutableCopy ];
    }
    // create a key string to see if font has already been created
    //
    NSString *strFontHash = [NSString stringWithFormat:@"%@-%f", fontName , pixels];
    UIFont *fnt = fontDict[strFontHash];
    if ( fnt != nil ) {
        return fnt; // we have already created this font
    }
    // lets play around and create a font that falls near the point size needed
    CGFloat pointStart = pixels/4;
    CGFloat lastHeight = -1;
    UIFont * lastFont = [UIFont fontWithName:fontName size:.5];\

    NSMutableDictionary * dictAttrs = [ @{ } mutableCopy ];
    NSString *fontCompareString = @"Mgj^";
    for ( CGFloat pnt = pointStart ; pnt < 1000 ; pnt += .5 ) {
        UIFont *font = [UIFont fontWithName:fontName size:pnt];
        if ( font == nil ) {
            NSLog(@"Unable to create font %@" , fontName );
            NSAssert(font == nil, @"font name not found in fontWithName:sizeInPixels" ); // correct the font being past in
        }
        dictAttrs[NSFontAttributeName] = font;
        CGSize cs = [fontCompareString sizeWithAttributes:dictAttrs];
        CGFloat fheight =  cs.height;
        if ( fheight == pixels  ) {
            // that will be rare but we found it
            fontDict[strFontHash] = font;
            return font;
        }
        if ( fheight > pixels ) {
            if ( lastFont == nil ) {
                fontDict[strFontHash] = font;
                return font;
            }
            // check which one is closer last height or this one
            // and return the user
            CGFloat fc1 = fabs( fheight - pixels );
            CGFloat fc2 = fabs( lastHeight  - pixels );
            // return the smallest differential
            if ( fc1 < fc2 ) {
                fontDict[strFontHash] = font;
                return font;
            } else {
                fontDict[strFontHash] = lastFont;
                return lastFont;
            }
        }
        lastFont = font;
        lastHeight = fheight;
    }
    NSAssert( false, @"Hopefully should never get here");
    return nil;
}


Answer 4:

我相信你正在寻找的UIFont NSString扩展,使您可以计算给定一个字符串的大小UIFont

这里是链接

具体地, sizeWithFont方法。



Answer 5:

以获取给定的字体和大小的像素高度的最简单方法是使用上的NSString的bo​​undingRect方法。 (我使用@"Ap"在这里,以确保它包含了伸和伸)。

- (CGFloat)heightForFont:(UIFont *)font
{
    NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
    CGRect boundingRect = [@"Ap" boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX) options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font} context:context];
    return boundingRect.size.height;
}


Answer 6:

你不能可靠地转换点像素作为PPI(点每英寸)将显示器切换到监控。 有一个读;

http://hsivonen.iki.fi/units/

转换像素点

这就是说,有些人已经把一些参考表,并且可以让你开始计算器;

http://www.unitconversion.org/typography/postscript-points-to-pixels-x-conversion.html

http://sureshjain.wordpress.com/2007/07/06/53/



Answer 7:

我将它们加入到我的数字出来:

一个sizedToFit的UILabel用12磅systemFont是15像素高。



文章来源: Font size in pixels