Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[util] Add hb-view --ink-box to take text ink bounding box for image size? #79

Closed
behdad opened this issue Jan 22, 2015 · 22 comments
Closed

Comments

@behdad
Copy link
Member

behdad commented Jan 22, 2015

No description provided.

@twardoch
Copy link

+1

1 similar comment
@davelab6
Copy link
Collaborator

+1

@behdad
Copy link
Member Author

behdad commented Jan 22, 2015

Any other small requests? File issues, I'm on a roll right now. :D

@twardoch
Copy link

Not sure how small it is, but — as you already know — I'd be all in favor of allowing the user to disable the "convenience functionalities" such as the fallback Arabic shaping (and the others you've listed). That, to me, is the most important semi-small thing that I'd love to have (and, I think, others would benefit from as well). I've added #80 for that.

@HinTak
Copy link
Contributor

HinTak commented Apr 8, 2016

I was looking for similar bugs before I file a new one: am doing some illustrations for my LG talk and found the padding around hb-view to be uneven - I have worked out that it seems to start at (16,16), and it seems to do 16 pixels on either side horizonally, but the bottom padding seems to vary from anthying from 16 to 22, etc... what exactly does it do for bottom padding?

@HinTak
Copy link
Contributor

HinTak commented Apr 8, 2016

At 256pt, the bottom padding goes up to 67pt. (while the other 3 sides stay at 16 pt).

@behdad
Copy link
Member Author

behdad commented Apr 8, 2016

At 256pt, the bottom padding goes up to 67pt. (while the other 3 sides stay at 16 pt).

You're seeing the font's descender, which happens to be left blank in your example. ink-box will definitely help with that.

@behdad
Copy link
Member Author

behdad commented Apr 8, 2016

You can set padding separately for the four sides, including negative padding.

@HinTak
Copy link
Contributor

HinTak commented Apr 8, 2016

Argh, the bottom must be reserved space for --annotate, which I did not use.

@HinTak
Copy link
Contributor

HinTak commented Apr 8, 2016

It seems that I want --margin=0, and removing the space allocated for --annotate.

@behdad
Copy link
Member Author

behdad commented Apr 8, 2016

Humm. I don't think we allocate space for annotate, no.

On Thu, Apr 7, 2016 at 5:54 PM, HinTak notifications@github.com wrote:

It seems that I want --margin=0, and removing the space allocated for
--annotate.


You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
#79 (comment)

behdad
http://behdad.org/

@HinTak
Copy link
Contributor

HinTak commented Apr 8, 2016

Argh, thanks. That explains it - CJK fonts do have Latin glyphs and non-zero descenders, but obviously I am not using Latin glyphs and keep forgetting that they are there, and just keep seeing empty spaces below :-).

@HinTak
Copy link
Contributor

HinTak commented Sep 26, 2018

I suppose if the code accepts negative margins, and there is a way of calculating and displaying the bound box vs the ascender/descender, that would be a first step...

@HinTak
Copy link
Contributor

HinTak commented Sep 26, 2018

It is also perhaps slightly confusing at the moment that ansi output does --ink-box effectively, but all of the others don't.

@HinTak
Copy link
Contributor

HinTak commented Sep 27, 2018

hb-shape has a --show-extents option which effectively gives you the size and position of the ink-box for each of the glyphs. Duplicating /invoking some of the same logic into hb-view , to use the largest of y_max and lowest of y_min of the collection of glyphs instead of the font's ascender/descender should do it. (plus setting X margin to zero).

For vertical layout, swap the treatment of x and y... The X equivalent of descender is probably just zero?

@HinTak
Copy link
Contributor

HinTak commented Oct 5, 2018

Besides many devanagari fonts have big ascender/descender (and big empty space above/below), I found an opposite case: a font drawing outside the region calculated by the current hb-view code.

If you draw the Persian word for harfbuzz in Arabic with the farsi font from the arabeyes project, the left side of the image is clipped. This is because hb-view does not know that the left most glyph has a negative x bearing.

Anyway, I have decided that for something like this (visual / user-friendly options / mandate stuff of calculating the smallest box that would contain all the ink ), I don't want to do c++. So I have started re-implementing part of hb-shape/hb-view in python using harfbuzz's gobject introspection binding. I should have something to show soon.

HinTak added a commit to HinTak/harfbuzz that referenced this issue Oct 6, 2018
@HinTak
Copy link
Contributor

HinTak commented Oct 6, 2018

I have extended the gobject python example to print the 4 margin values to crop to ink box ( HinTak@667ddae ) . Passing the 4 numbers printed at the end to hb-view give you the tight ink-box look. Tested mostly with Arabic.

Please feel free to copy the python code logic back to the c++ utility.

If I find enough time, I'll append cairo drawing code (pycairo) to the end of the script to draw it...

@HinTak
Copy link
Contributor

HinTak commented Oct 6, 2018

I have re-cycled some old python code I wrote for freetype-py to do the drawing with cairo. So here it is:

70a81d0

What the c++ hb-view does (reversed background/forreground, but otherwise at default):
default0

What my new python code does:

hb-view

heehee.

I feel like putting this into a harfbuzz-python-demos project. cc @anthrotype - please feel free to rewrite the first half in uharfbuzz.... then we can definitely have a harfbuzz-python-demo project pitching different harfbuzz python bindings...

@HinTak
Copy link
Contributor

HinTak commented Oct 6, 2018

another comparison - current upstream:
dd1

the python code:
ddview

@HinTak
Copy link
Contributor

HinTak commented Oct 7, 2018

I have tidied and put the code up ( https://github.com/HinTak/harfbuzz-python-demos ) as well as wrote a readme with the images above, explaining what it does.

@anthrotype : please feel free to improve and/or port it to uharfbuzz .

@behdad
Copy link
Member Author

behdad commented Oct 7, 2018

Can we get you to move your chatter somewhere else? We all know what limitations of logical vs ink box are, and how to implement it. Don't need to see how you did it. Thank you.

@HinTak
Copy link
Contributor

HinTak commented Oct 7, 2018

Okay. People who end up here can go file issues, add code at https://github.com/HinTak/harfbuzz-python-demos , or copy the 20 to 30 lines of python code back to c++ here.

@behdad behdad closed this as completed Sep 2, 2021
gpgreen pushed a commit to gpgreen/harfbuzz that referenced this issue Jan 10, 2024
disable .so files

Fix harfbuzz#79

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/rust-harfbuzz/80)
<!-- Reviewable:end -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants