Re: how to scale text to a bounding rectangle?
- To: mathgroup at smc.vnet.net
- Subject: [mg110430] Re: how to scale text to a bounding rectangle?
- From: "Alexey Popkov" <lehin.p at gmail.com>
- Date: Thu, 17 Jun 2010 07:11:30 -0400 (EDT)
- References: <hvcds8$5h9$1@smc.vnet.net>
Hi, Michael,
You can try to play with text outlines (vector representation of the text):
Graphics[{{FaceForm[], EdgeForm[Black], Rectangle[{0, 0}, {100, 10}]},
Inset[First@ImportString[ExportString[Style["Hello", 36], "PDF"], "PDF"]]}]
"Michael" <michael2718 at gmail.com> news:hvcds8$5h9$1 at smc.vnet.net...
> The problem with both of these solutions is that I need the bounding
> rectangle to be in a Graphics[] expression because I'm creating several
> of these text filled boxes at arbitrary offsets. I'm trying to create
> something similar to Graph[] (hopefully using it's embedding functions)
> but instead of vertexes I want to create collections of boxes containing
> text. However Mathematica seems to render text independently of the
> coordinate range of the graphic. For example, these two expressions
> produce identical output:
>
> Graphics[{
> Text[Style["Test", 12]],
> Circle[{0, 0}, 1]
> }
> ]
>
> Graphics[{
> Text[Style["Test", 12]],
> Circle[{0, 0}, 100]
> }
> ]
>
> I found something close to what I want to do, but it's ugly because the
> graphics don't scale nicely:
>
> Graphics[{
> FaceForm[], EdgeForm[Black],
> Raster[Reverse[Rasterize["Hello", "Data"]], {{0, 0}, {100, 16}}],
> Rectangle[{0, 0}, {100, 16}]
> }
> ]
>
> But I would have to hope that surely there is some way to put Text[] in
> Graphics[] such that the size of the text is proportional to the visible
> coordinate range of the Graphics[]. Even if I could only find the size
> of the text in a given image I could then scale it as needed. I tried
> using Rasterize[string,"RasterSize"] but I couldn't figure out how to
> make it work. Any ideas along that line? I'm hoping that I'm just
> missing something obvious that I've overlooked in Mathematica's big API...
>
> Thanks,
>
> Michael
>
>
>> On 6/15/2010 2:29 AM, Michael wrote:
>>> How can I automatically scale Text[] to fit into a bounding rectangle of
>>> a size that I specify?
>>>
>>> For instance, I can get a pretty close result here, but it is not
>>> perfect (the text doesn't touch the bottom edge of the rectangle), and
>>> "36", {0,0}, and {-1,-1} are all numbers I had to find through trial and
>>> error:
>>>
>>> Graphics[{
>>> FaceForm[], EdgeForm[Black],
>>> Rectangle[{0, 0}, {100, 10}],
>>> Text[Style["Hello", 36], {0, 0}, {-1, -1}]
>>> }
>>> ]
> On 6/16/2010 2:41 AM, Alexei Boulbitch wrote:
>> Hi, Michael,
>>
>> try this:
>>
>> Manipulate[
>>
>> Framed@Pane[Graphics[Text[Style["ABcdEG", n]]], {m1, m2},
>> Alignment -> Center],
>>
>> {n, 10, 30}, {m1, 50, 200}, {m2, 20, 200}]
>>
>> and play with parameters to chose those fitting your needs.
>> Have fun, Alexei
> On 6/16/2010 2:42 AM, Helen Read wrote:
>> Framed[Text[Style["Hello"]]]
>>
>> If you want the 36 point font, that's fine too.
>>
>> Framed[Text[Style["Hello", 36]]]
>>
>> You can set FrameMargins on any or all sides.
>>
>> Framed[Text[Style["Hello", 36]], FrameMargins -> {{10, 200}, {0, 0}}]
>>
>> Framed[Text[Style["Hello", 36]], FrameMargins -> 20]
>
>
>