GVKun编程网logo

PHP GD库添加freetype拓展的方法(php gd扩展)

10

本文的目的是介绍PHPGD库添加freetype拓展的方法的详细情况,特别关注phpgd扩展的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解PHPGD库添加freet

本文的目的是介绍PHP GD库添加freetype拓展的方法的详细情况,特别关注php gd扩展的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解PHP GD库添加freetype拓展的方法的机会,同时也不会遗漏关于android – LibGDX gdx-freetype BlueStacks、com.badlogic.gdx.graphics.g2d.freetype.FreeType.Face的实例源码、com.badlogic.gdx.graphics.g2d.freetype.FreeType.SizeMetrics的实例源码、com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData的实例源码的知识。

本文目录一览:

PHP GD库添加freetype拓展的方法(php gd扩展)

PHP GD库添加freetype拓展的方法(php gd扩展)

背景:业务需求要用到 imagefttext 函数,发现GD库一开始安装时没有添加 FreeType

linux版本 centos 6.6

安装流程(由于服务器为分布式内网服务器,无法使用yum安装,以下均为下载资源包后的编译安装):

安装freetype

解压freetype-2.3.9.tar.gz

编译安装

./configure --enable-static --enable-shared (没有指定prefix,.h文件默认安装到 /usr/local/include, .a|.so文件默认安装到 /usr/local/lib内 其他资源包的安装如果没有指定目录也是一样到这个位置)

make && make install

确认freetype 安装成功后重新编译安装GD库,添加freetype 支持

安装gd库,版本2.0.35

由于之前有安装记录,建议先make clean,否则可能导致安装失败

./configure --enable-shared --with-jpeg=/usr/local/include/ --with-freetype=/usr/local/ --with-png=/usr/local/include/

在这个目录内,改为上一级目录后引入成功)

确认 Support for Freetype 2.x library: yes

make && make install

确认安装成功后重新编译安装PHP的gd拓展

PHP版本5.5.38

单独安装gd拓展模块需要cd 到 PHP-5.5.38/ext/gd

执行 PHPize 生成编译文件,如果系统没有引入PHPize,这个文件在PHP安装目录下的bin中

在这里一定要先执行make clean,这次安装了8台服务器,没有先执行make clean的100%没有安装成功,都没有添加到freetype support

./configure --with-PHP-config=/opt/PHP5.5.38/bin/PHP-config --with-jpeg-dir --with-png-dir --with-freetype-dir --with-zlib-dir --with-gd

确认freetype 2 在编译中已被添加

make && make install

确认新生成的.so文件是否跟PHP.ini中原来引入的路径相同,如果不同需要修改PHP.ini 中的extension

安装成功后重启PHP-fpm

ps axu |grep PHP |grep -v 'grep'|awk '{print $2}'|xargs kill -9

/PHP5.5.38/sbin/PHP-fpm

重启成功后查看PHPinfo中的gd是否包含

finished

以上这篇PHP GD库添加freetype拓展的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小编。

总结

以上是小编为你收集整理的PHP GD库添加freetype拓展的方法全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

php添加freetype

PHP相关文章

使用ThinkPHP+Uploadify实现图片上传功能
首先,将下载的Uploadify压缩包解压放到公共文件夹内。实现代码如下: 前台html部分:
JQuery打造PHP的AJAX表单提交实例
本实例只利用到JQuery类库本身的函数和功能,不需要第三方插件的支持。另外,所有表单信息都是利用PHPMailer类库邮件的形式发送给管理员。
PHP生成图片验证码、点击切换实例
这里来看下效果:  现在让我们来看下PHP代码: <?php     session_start();  function random($len) {
PHP实现无限级分类(递归方法)
效果: 实现代码: <?php include(\"tree.class.php\"); //具有这个结构的数组,不是这样的话,可以改类的实现
php连接及读取和写入mysql数据库的常用代码
既然现在你看到了这篇文章,说明你肯定知道PHP和MySQL是怎么一回事,我就不啰嗦了。但为什么你还要继续阅读此文呢?可能是以前你习惯复制粘贴一些代码,并没有真正弄懂代码的含义;也可能你以前弄懂了,但像我一样,
PHP网站安装程序的原理及代码
原理: 其实PHP程序的安装原理无非就是将数据库结构和内容导入到相应的数据库中,从这个过程中重新配置连接数据库的参数和文件,为了保证不被别人恶意使用安装文件,当安装完成后需要修改安装文件。
PHP备份/还原MySQL数据库的代码
之前是采用PHP读取数据库结构和内容,然后写文件,这样可能会导致导出的文件不一定能百分百导入到MySQL中去,想想之后采用MySQL自带的导入导出命令最保险.
PHP上传压缩包并自解压方法
1、PHP上传压缩包并解压的大概流程: 普通上传功能->上传到服务器->加载系统组件->找到上传的文件并执行解压命令->成功解压到目录 
  • • 使用ThinkPHP+Uploadify实现图片上传功
  • • JQuery打造PHP的AJAX表单提交实例
  • • PHP生成图片验证码、点击切换实例
  • • PHP实现无限级分类(递归方法)
  • • php连接及读取和写入mysql数据库的常用
  • • PHP网站安装程序的原理及代码
  • • PHP备份/还原MySQL数据库的代码
  • • PHP上传压缩包并自解压方法
  • • php实现MySQL数据库备份与还原类实例
  • • php mysql数据库操作类
pythonjavaC#AndroidrjQueryIOSdjangolinuxJSON路由器dockerClaravelPostgresqlexcelmongodbdartoraclexml.NetUbuntuASP.NETdatabasenumpyStringandroid-stvisual-stufunctioncentoswin10kubernetesaspShellSQLiterubyC++前端perl操作
  • 友情链接:
  • 菜鸟教程
  • 前端之家
  • 编程小课
  • 小编
  • -
  • 我要投稿
  • -
  • 广告合作
  • -
  • 联系我们
  • -
  • 免责声明
  • -
  • 网站地图
版权所有 © 2018 小编 闽ICP备13020303号-8
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜"程序精选"关注
微信扫一扫可直接关注哦!

android – LibGDX gdx-freetype BlueStacks

android – LibGDX gdx-freetype BlueStacks

我有正确的应用程序在真正的 Android设备和桌面上. Homever当我试图在BlueStacks模拟器上启动它时,我遇到了一些问题.已经下载并添加到libs .so文件,从这里 http://libgdx.googlecode.com/svn/tags/0.9.6/extensions/gdx-freetype/libs/linux32/

但仍然:

11-08 21:14:10.280: E/AndroidRuntime(1378): FATAL EXCEPTION: GLThread 9
11-08 21:14:10.280: E/AndroidRuntime(1378): com.badlogic.gdx.utils.GdxRuntimeException: Couldn''t load shared library ''gdx-freetype'' for target: Linux,32-bit
11-08 21:14:10.280: E/AndroidRuntime(1378):     at com.badlogic.gdx.utils.SharedLibraryLoader.load(SharedLibraryLoader.java:110)
11-08 21:14:10.280: E/AndroidRuntime(1378):     at com.badlogic.gdx.graphics.g2d.freetype.FreeType.initFreeType(FreeType.java:541)
11-08 21:14:10.280: E/AndroidRuntime(1378):     at com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.<init>(FreeTypeFontGenerator.java:64)
11-08 21:14:10.280: E/AndroidRuntime(1378):     at com.axl.where.test.create(test.java:153)
11-08 21:14:10.280: E/AndroidRuntime(1378):     at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:334)
11-08 21:14:10.280: E/AndroidRuntime(1378):     at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1356)
11-08 21:14:10.280: E/AndroidRuntime(1378):     at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118)
11-08 21:14:10.280: E/AndroidRuntime(1378): Caused by: java.lang.UnsatisfiedLinkError: Couldn''t load gdx-freetype: findLibrary returned null
11-08 21:14:10.280: E/AndroidRuntime(1378):     at java.lang.Runtime.loadLibrary(Runtime.java:429)
11-08 21:14:10.280: E/AndroidRuntime(1378):     at java.lang.System.loadLibrary(System.java:554)
11-08 21:14:10.280: E/AndroidRuntime(1378):     at    com.badlogic.gdx.utils.SharedLibraryLoader.load(SharedLibraryLoader.java:106)
11-08 21:14:10.280: E/AndroidRuntime(1378):     ... 6 more

有任何想法吗 ? LibGDX 0.9.9

解决方法

您需要在libs目录中添加一个x86文件夹(沿着armeabi目录),并在其上复制此文件:

http://libgdx.badlogicgames.com/nightlies/dist/extensions/gdx-freetype/x86/

另外,你正在使用v0.9.6文件o.O使用nightlies:

http://libgdx.badlogicgames.com/nightlies/dist/extensions/gdx-freetype/

com.badlogic.gdx.graphics.g2d.freetype.FreeType.Face的实例源码

com.badlogic.gdx.graphics.g2d.freetype.FreeType.Face的实例源码

项目:gdx-styledtext    文件:GdxFontUtil.java   
static UnderlineMetrics deriveUnderlineMetrics(FreeTypeFontGenerator generator,int size) {
    try {
        // Size metrics aren't publicly accessible (as of 1.9.3). (Ab)use reflection to gain access.
        Field faceField = FreeTypeFontGenerator.class.getDeclaredField("face");
        faceField.setAccessible(true);
        Face face = (Face)faceField.get(generator);

        SizeMetrics sizeMetrics = face.getSize().getMetrics();

        int yScale = sizeMetrics.getYscale(); // 16.16 fixed point
        float position = FreeType.toInt(face.getUnderlinePosition() * yScale >> 16);
        float thickness = FreeType.toInt(face.getUnderlineThickness() * yScale >> 16);
        return new UnderlineMetrics(position,thickness);
    } catch (Exception e) {
        LOG.error("Error fetching FreeType underline metrics",e);
    }

    // Return a reasonable default
    return UnderlineMetrics.defaultInstance(size);
}

com.badlogic.gdx.graphics.g2d.freetype.FreeType.SizeMetrics的实例源码

com.badlogic.gdx.graphics.g2d.freetype.FreeType.SizeMetrics的实例源码

项目:gdx-styledtext    文件:GdxFontUtil.java   
static UnderlineMetrics deriveUnderlineMetrics(FreeTypeFontGenerator generator,int size) {
    try {
        // Size metrics aren't publicly accessible (as of 1.9.3). (Ab)use reflection to gain access.
        Field faceField = FreeTypeFontGenerator.class.getDeclaredField("face");
        faceField.setAccessible(true);
        Face face = (Face)faceField.get(generator);

        SizeMetrics sizeMetrics = face.getSize().getMetrics();

        int yScale = sizeMetrics.getYscale(); // 16.16 fixed point
        float position = FreeType.toInt(face.getUnderlinePosition() * yScale >> 16);
        float thickness = FreeType.toInt(face.getUnderlineThickness() * yScale >> 16);
        return new UnderlineMetrics(position,thickness);
    } catch (Exception e) {
        LOG.error("Error fetching FreeType underline metrics",e);
    }

    // Return a reasonable default
    return UnderlineMetrics.defaultInstance(size);
}
项目:gdx-freetype-gwt    文件:FreeTypeFontGenerator.java   
/** Uses ascender and descender of font to calculate real height that makes all glyphs to fit in given pixel size. Source:
 * http://nothings.org/stb/stb_truetype.h / stbtt_ScaleForPixelHeight */
public int scaleForPixelHeight (int height) {
    setPixelSizes(0,height);
    SizeMetrics fontMetrics = face.getSize().getMetrics();
    int ascent = FreeType.toInt(fontMetrics.getAscender());
    int descent = FreeType.toInt(fontMetrics.getDescender());
    return height * height / (ascent - descent);
}
项目:gdx-freetype-gwt    文件:FreeTypeFontGenerator.java   
/** Uses max advance,ascender and descender of font to calculate real height that makes any n glyphs to fit in given pixel
 * width.
 * @param width the max width to fit (in pixels)
 * @param numChars max number of characters that to fill width */
public int scaleForPixelWidth (int width,int numChars) {
    SizeMetrics fontMetrics = face.getSize().getMetrics();
    int advance = FreeType.toInt(fontMetrics.getMaxAdvance());
    int ascent = FreeType.toInt(fontMetrics.getAscender());
    int descent = FreeType.toInt(fontMetrics.getDescender());
    int unscaledHeight = ascent - descent;
    int height = unscaledHeight * width / (advance * numChars);
    setPixelSizes(0,height);
    return height;
}
项目:libgdxcn    文件:FreeTypeFontGenerator.java   
/** Uses ascender and descender of font to calculate real height that makes all glyphs to fit in given pixel size. Source:
 * http://nothings.org/stb/stb_truetype.h / stbtt_ScaleForPixelHeight */
public int scaleForPixelHeight (int height) {
    if (!bitmapped && !FreeType.setPixelSizes(face,height)) throw new GdxRuntimeException("Couldn't set size for font");
    SizeMetrics fontMetrics = face.getSize().getMetrics();
    int ascent = FreeType.toInt(fontMetrics.getAscender());
    int descent = FreeType.toInt(fontMetrics.getDescender());
    return height * height / (ascent - descent);
}
项目:libgdxcn    文件:FreeTypeFontGenerator.java   
/** Uses max advance,ascender and descender of font to calculate real height that makes any n glyphs to fit in given pixel width. 
 * @param width the max width to fit (in pixels)
 * @param numChars max number of characters that to fill width */
public int scaleForPixelWidth(int width,int numChars) {
    SizeMetrics fontMetrics = face.getSize().getMetrics();
    int advance = FreeType.toInt(fontMetrics.getMaxAdvance());
    int ascent = FreeType.toInt(fontMetrics.getAscender());
    int descent = FreeType.toInt(fontMetrics.getDescender());
    int unscaledHeight = ascent - descent;
    int height = unscaledHeight * width / (advance * numChars);
    if (!bitmapped && !FreeType.setPixelSizes(face,height)) throw new GdxRuntimeException("Couldn't set size for font");
    return height;
}
项目:gdx-freetype-gwt    文件:FreeTypeFontGenerator.java   
/** Returns null if glyph was not found. If there is nothing to render,for example with varIoUs space characters,then bitmap
 * is null. */
public GlyphAndBitmap generateGlyphAndBitmap (int c,int size,boolean flip) {
    setPixelSizes(0,size);

    SizeMetrics fontMetrics = face.getSize().getMetrics();
    int baseline = FreeType.toInt(fontMetrics.getAscender());

    // Check if character exists in this font.
    // 0 means 'undefined character code'
    if (face.getCharIndex(c) == 0) {
        return null;
    }

    // Try to load character
    if (!loadChar(c)) {
        throw new GdxRuntimeException("Unable to load character!");
    }

    GlyphSlot slot = face.getGlyph();

    // Try to render to bitmap
    Bitmap bitmap;
    if (bitmapped) {
        bitmap = slot.getBitmap();
    } else if (!slot.renderGlyph(FreeType.FT_RENDER_MODE_norMAL)) {
        bitmap = null;
    } else {
        bitmap = slot.getBitmap();
    }

    GlyphMetrics metrics = slot.getMetrics();

    Glyph glyph = new Glyph();
    if (bitmap != null) {
        glyph.width = bitmap.getWidth();
        glyph.height = bitmap.getRows();
    } else {
        glyph.width = 0;
        glyph.height = 0;
    }
    glyph.xoffset = slot.getBitmapLeft();
    glyph.yoffset = flip ? -slot.getBitmapTop() + baseline : -(glyph.height - slot.getBitmapTop()) - baseline;
    glyph.xadvance = FreeType.toInt(metrics.getHoriAdvance());
    glyph.srcX = 0;
    glyph.srcY = 0;
    glyph.id = c;

    GlyphAndBitmap result = new GlyphAndBitmap();
    result.glyph = glyph;
    result.bitmap = bitmap;
    return result;
}
项目:libgdxcn    文件:FreeTypeFontGenerator.java   
/** Returns null if glyph was not found. If there is nothing to render,boolean flip) {
    if (!bitmapped && !FreeType.setPixelSizes(face,size)) throw new GdxRuntimeException("Couldn't set size for font");

    SizeMetrics fontMetrics = face.getSize().getMetrics();
    int baseline = FreeType.toInt(fontMetrics.getAscender());

    // Check if character exists in this font.
    // 0 means 'undefined character code'
    if (FreeType.getCharIndex(face,c) == 0) {
        return null;
    }

    // Try to load character
    if (!FreeType.loadChar(face,c,FreeType.FT_LOAD_DEFAULT)) {
        throw new GdxRuntimeException("Unable to load character!");
    }

    GlyphSlot slot = face.getGlyph();

    // Try to render to bitmap
    Bitmap bitmap;
    if (bitmapped) {
        bitmap = slot.getBitmap();
    } else if (!FreeType.renderGlyph(slot,FreeType.FT_RENDER_MODE_LIGHT)) {
        bitmap = null;
    } else {
        bitmap = slot.getBitmap();
    }

    GlyphMetrics metrics = slot.getMetrics();

    Glyph glyph = new Glyph();
    if (bitmap != null) {
        glyph.width = bitmap.getWidth();
        glyph.height = bitmap.getRows();
    } else {
        glyph.width = 0;
        glyph.height = 0;
    }
    glyph.xoffset = slot.getBitmapLeft();
    glyph.yoffset = flip ? -slot.getBitmapTop() + baseline : -(glyph.height - slot.getBitmapTop()) - baseline;
    glyph.xadvance = FreeType.toInt(metrics.getHoriAdvance());
    glyph.srcX = 0;
    glyph.srcY = 0;
    glyph.id = c;

    GlyphAndBitmap result = new GlyphAndBitmap();
    result.glyph = glyph;
    result.bitmap = bitmap;
    return result;
}

com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData的实例源码

com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData的实例源码

项目:libgdxcn    文件:FreeTypeTest.java   
@Override
public void create () {
    boolean flip = false;
    batch = new SpriteBatch();
    if (flip) {
        OrthographicCamera cam = new OrthographicCamera();
        cam.setToOrtho(flip);
        cam.update();
        batch.setProjectionMatrix(cam.combined);
    }
    font = new BitmapFont(Gdx.files.internal("data/arial-15.fnt"),flip);
    FileHandle fontFile = Gdx.files.internal("data/arial.ttf");

    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

    FreeTypeFontParameter parameter = new FreeTypeFontParameter();
    parameter.size = 15;
    parameter.flip = flip;
    parameter.genMipMaps = true;

    FreeTypeBitmapFontData fontData = generator.generateData(parameter);
    ftFont = generator.generateFont(parameter);
    generator.dispose();
}
项目:skinpacker    文件:Ttf2FntGenerator.java   
/**
 * Convenience method for generating a font,and then writing the fnt and
 * png files. Writing a generated font to files allows the possibility of
 * only generating the fonts when they are missing,otherwise loading from a
 * prevIoUsly generated file.
 * 
 * @param fontFile
 * @param fontSize
 * @param destiny
 */
private void generateFiles(String fontName,FileHandle fontFile,int fontSize,int pageWidth,int pageHeight,FileHandle destiny) {
    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

    pixmapPacker packer = new pixmapPacker(pageWidth,pageHeight,pixmap.Format.RGBA8888,2,false);
    FreeTypeFontParameter param = new FreeTypeFontParameter();
    param.packer = packer;
    param.characters = FreeTypeFontGenerator.DEFAULT_CHARS;
    param.size = fontSize;
    param.flip = false;

    FreeTypeFontGenerator.FreeTypeBitmapFontData fontData = generator
            .generateData(param);

    saveFontToFile(fontData,fontSize,fontName,packer,destiny);
    generator.dispose();
    packer.dispose();
}
项目:skinpacker    文件:Ttf2FntGenerator.java   
private void saveFontToFile(FreeTypeBitmapFontData data,String fontName,pixmapPacker packer,FileHandle destiny) {
    FileHandle fontFile = Gdx.files.absolute(destiny.file()
            .getAbsolutePath() + File.separator + fontName + ".fnt"); // .fnt
    // path     

    BitmapFontWriter.setoutputFormat(BitmapFontWriter.OutputFormat.Text);

    String[] pageRefs = BitmapFontWriter.writepixmaps(packer.getPages(),destiny,fontName); // png dir path
    Gdx.app.debug(TAG,String.format(
            "Saving font [%s]: fontfile: %s,pixmapDir: %s\n",fontFile,destiny));
    BitmapFontWriter.writeFont(data,pageRefs,new BitmapFontWriter.FontInfo(fontName,fontSize),1,1);
}
项目:libgdxcn    文件:FreetypeFontLoader.java   
@Override
public BitmapFont loadSync (AssetManager manager,String fileName,FileHandle file,FreeTypeFontLoaderParameter parameter) {
    if(parameter == null) throw new RuntimeException("FreetypeFontParameter must be set in AssetManager#load to point at a TTF file!");
    FreeTypeFontGenerator generator = manager.get(parameter.fontFileName + ".gen",FreeTypeFontGenerator.class);    
    FreeTypeBitmapFontData data = generator.generateData(parameter.fontParameters);
    BitmapFont font = new BitmapFont(data,data.getTextureRegions(),false);
    font.setownsTexture(true);
    return font;
}
项目:OverdriveGDX    文件:FreeTypeFontLoader.java   
@Override
public BitmapFont loadSync( AssetManager manager,BitmapFontParameter parameter ) {
    int fontSize = 10;
    String scrubbedFileName = fileName;

    int qMark = fileName.lastIndexOf( "?" );
    if ( qMark != -1 ) {
        scrubbedFileName = scrubbedFileName.substring( 0,qMark );

        Matcher m = argsPtn.matcher( fileName );
        m.region( qMark+1,fileName.length() );
        while ( m.lookingAt() ) {
            if ( m.group( 1 ).equals( "size" ) ) {
                fontSize = Integer.parseInt( m.group( 2 ) );
            }
            if ( m.group( 3 ).length() > 0 ) break;  // Hit the "#" separator.
            m.region( m.end(),fileName.length() );
        }
    }

    boolean flip = parameter != null ? parameter.flip : false;

    FreeTypeFontGenerator generator = new FreeTypeFontGenerator( file );

    FreeTypeBitmapFontData data = generator.generateData( fontSize,FreeTypeFontGenerator.DEFAULT_CHARS,flip );
    generator.dispose();

    return new BitmapFont( data,true );
}

关于PHP GD库添加freetype拓展的方法php gd扩展的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于android – LibGDX gdx-freetype BlueStacks、com.badlogic.gdx.graphics.g2d.freetype.FreeType.Face的实例源码、com.badlogic.gdx.graphics.g2d.freetype.FreeType.SizeMetrics的实例源码、com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData的实例源码的相关知识,请在本站寻找。

本文标签: