ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* resize and center and clip image
@ 2014-05-01 11:50 Mikael P. Sundqvist
  2014-05-01 13:38 ` Mikael P. Sundqvist
  0 siblings, 1 reply; 8+ messages in thread
From: Mikael P. Sundqvist @ 2014-05-01 11:50 UTC (permalink / raw)
  To: mailing list for ConTeXt users

[-- Attachment #1: Type: text/plain, Size: 835 bytes --]

Hi!

Assume that I want to fill in the text area with images, and I want to
clip and scale them according to these rules:

1) If the image is "too wide" (in sense of proportions), then scale it
so that the height fits the text area height, center it, and clip it
to the text area. (See the attached image, on top, where the blue area
is supposed to show the text area and the red rectangle the image.)

2) If the image is "too high" (in sense of proportions), then scale it
so that the width fits the text area width, center it, and clip it to
the text area. (See the attached image, on bottom.)

The background why I want to do this is that I'm making a small
template for presentations, and I'd like the users to insert images as
background without really having to think about if their proportions
fit or not.

Best regards, Mikael

[-- Attachment #2: contextresizecenter.png --]
[-- Type: image/png, Size: 8957 bytes --]

[-- Attachment #3: Type: text/plain, Size: 485 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: resize and center and clip image
  2014-05-01 11:50 resize and center and clip image Mikael P. Sundqvist
@ 2014-05-01 13:38 ` Mikael P. Sundqvist
  2014-05-01 14:59   ` Otared Kavian
  0 siblings, 1 reply; 8+ messages in thread
From: Mikael P. Sundqvist @ 2014-05-01 13:38 UTC (permalink / raw)
  To: mailing list for ConTeXt users

OK, sorry for the noise. I think I have the solution:

\startexternalfigurecollection[k.jpg]
     \useexternalfigure[k.jpg][k.jpg]
 \stopexternalfigurecollection


\externalfigurecollectionminwidth{k.jpg}
\externalfigurecollectionmaxheight{k.jpg}

\clip[width=8cm,height=7cm]{%
\framed[width=8cm,height=7cm,align={middle,lohi},offset=overlay]{%
\dimen0=\externalfigurecollectionminwidth{k.jpg}
\dimen2=\externalfigurecollectionmaxheight{k.jpg}
\dimen4=8cm
\dimen6=7cm
\startluacode
if tex.dimen[0] / tex.dimen[2] < tex.dimen[4] / tex.dimen[6] then
      local skalning =
-0.5*(tex.dimen[4]/tex.dimen[0]*tex.dimen[2]-tex.dimen[6])
      context("\\vskip%ssp", skalning)
      context.externalfigure({"k.jpg"},{width="8cm"})
      context.sprint("foo")
else
      local skalning =
-0.5*(tex.dimen[6]/tex.dimen[2]*tex.dimen[0]-tex.dimen[4])
      context("\\hskip%ssp", skalning)
      context.externalfigure({"k.jpg"},{height="7cm"})
      context.sprint("bar")
end
\stopluacode
}}

If there are any bad side effects of this or simplifications, please
do not hesitate to tell me :)

/Mikael

On Thu, May 1, 2014 at 1:50 PM, Mikael P. Sundqvist <mickep@gmail.com> wrote:
> Hi!
>
> Assume that I want to fill in the text area with images, and I want to
> clip and scale them according to these rules:
>
> 1) If the image is "too wide" (in sense of proportions), then scale it
> so that the height fits the text area height, center it, and clip it
> to the text area. (See the attached image, on top, where the blue area
> is supposed to show the text area and the red rectangle the image.)
>
> 2) If the image is "too high" (in sense of proportions), then scale it
> so that the width fits the text area width, center it, and clip it to
> the text area. (See the attached image, on bottom.)
>
> The background why I want to do this is that I'm making a small
> template for presentations, and I'd like the users to insert images as
> background without really having to think about if their proportions
> fit or not.
>
> Best regards, Mikael
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: resize and center and clip image
  2014-05-01 13:38 ` Mikael P. Sundqvist
@ 2014-05-01 14:59   ` Otared Kavian
  2014-05-01 15:07     ` Mikael P. Sundqvist
  0 siblings, 1 reply; 8+ messages in thread
From: Otared Kavian @ 2014-05-01 14:59 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Hi Mikael,

Out of curiosity I tried to typeset your example (after adding the usual \starttext, \stoptext), but using 
	ConTeXt  ver: 2014.04.28 23:24 MKIV beta  fmt: 2014.4.29  int: english/english 
I obtained a TeX error:

tex error       > error on line 13 in file /Users/kavian/Context/essais/mkii/figures/resize-and-center.tex: ! Undefined control sequence


\startexternalfigurecollection ...igurecollection 
                                                  {#1}\settrue \c_grph_inclu...
l.13 \clip[width=8cm,height=7cm]
                              {%

 3     \startexternalfigurecollection[k.jpg]
 4         \useexternalfigure[k.jpg][k.jpg]
 5     \stopexternalfigurecollection

I did not understand what is the « Undefined control sequence », since I think \clip is a known control sequence.

Best regards: OK

On 1 mai 2014, at 15:38, Mikael P. Sundqvist <mickep@gmail.com> wrote:

> OK, sorry for the noise. I think I have the solution:
> 
> \startexternalfigurecollection[k.jpg]
>     \useexternalfigure[k.jpg][k.jpg]
> \stopexternalfigurecollection
> 
> 
> \externalfigurecollectionminwidth{k.jpg}
> \externalfigurecollectionmaxheight{k.jpg}
> 
> \clip[width=8cm,height=7cm]{%
> \framed[width=8cm,height=7cm,align={middle,lohi},offset=overlay]{%
> \dimen0=\externalfigurecollectionminwidth{k.jpg}
> \dimen2=\externalfigurecollectionmaxheight{k.jpg}
> \dimen4=8cm
> \dimen6=7cm
> \startluacode
> if tex.dimen[0] / tex.dimen[2] < tex.dimen[4] / tex.dimen[6] then
>      local skalning =
> -0.5*(tex.dimen[4]/tex.dimen[0]*tex.dimen[2]-tex.dimen[6])
>      context("\\vskip%ssp", skalning)
>      context.externalfigure({"k.jpg"},{width="8cm"})
>      context.sprint("foo")
> else
>      local skalning =
> -0.5*(tex.dimen[6]/tex.dimen[2]*tex.dimen[0]-tex.dimen[4])
>      context("\\hskip%ssp", skalning)
>      context.externalfigure({"k.jpg"},{height="7cm"})
>      context.sprint("bar")
> end
> \stopluacode
> }}
> 
> If there are any bad side effects of this or simplifications, please
> do not hesitate to tell me :)
> 
> /Mikael
> 
> On Thu, May 1, 2014 at 1:50 PM, Mikael P. Sundqvist <mickep@gmail.com> wrote:
>> Hi!
>> 
>> Assume that I want to fill in the text area with images, and I want to
>> clip and scale them according to these rules:
>> 
>> 1) If the image is "too wide" (in sense of proportions), then scale it
>> so that the height fits the text area height, center it, and clip it
>> to the text area. (See the attached image, on top, where the blue area
>> is supposed to show the text area and the red rectangle the image.)
>> 
>> 2) If the image is "too high" (in sense of proportions), then scale it
>> so that the width fits the text area width, center it, and clip it to
>> the text area. (See the attached image, on bottom.)
>> 
>> The background why I want to do this is that I'm making a small
>> template for presentations, and I'd like the users to insert images as
>> background without really having to think about if their proportions
>> fit or not.
>> 
>> Best regards, Mikael
> ___________________________________________________________________________________
> If your question is of interest to others as well, please add an entry to the Wiki!
> 
> maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
> webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
> archive  : http://foundry.supelec.fr/projects/contextrev/
> wiki     : http://contextgarden.net
> ___________________________________________________________________________________

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: resize and center and clip image
  2014-05-01 14:59   ` Otared Kavian
@ 2014-05-01 15:07     ` Mikael P. Sundqvist
  2014-05-01 16:43       ` Otared Kavian
  2014-05-01 18:00       ` Aditya Mahajan
  0 siblings, 2 replies; 8+ messages in thread
From: Mikael P. Sundqvist @ 2014-05-01 15:07 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Interesting,

I use ConTeXt  ver: 2014.04.28 23:24 MKIV beta  fmt: 2014.4.29  int:
english/english

and it works. I now defined this with argument:

\startluacode
userdata = userdata or {}
function userdata.lundklippfyllbild(str, bredd, hojd)
if tex.dimen[0] / tex.dimen[2] < tex.dimen[4] / tex.dimen[6] then
      local skalning =
-0.5*(tex.dimen[4]/tex.dimen[0]*tex.dimen[2]-tex.dimen[6])
      context("\\vskip%ssp", skalning)
      context.externalfigure({str},{width=bredd})
      context.sprint("foo")
else
      local skalning =
-0.5*(tex.dimen[6]/tex.dimen[2]*tex.dimen[0]-tex.dimen[4])
      context("\\hskip%ssp", skalning)
      context.externalfigure({str},{height=hojd})
      context.sprint("bar")
end
end
\stopluacode

\unexpanded\def\lundklippfyllbild#1#2#3{%
\startexternalfigurecollection[#1]%
\useexternalfigure[#1][#1]%
\stopexternalfigurecollection%
\clip[
width=#2,
height=#3,
hoffset=0mm,
voffset=0mm,
]{%
\framed[width=#2,height=#3,align={middle,lohi},offset=overlay,frame=off]{%
\dimen0=\externalfigurecollectionminwidth{#1}%
\dimen2=\externalfigurecollectionmaxheight{#1}%
\dimen4=#2%
\dimen6=#3%
{\ctxlua{userdata.lundklippfyllbild([==[#1]==],[==[#2]==],[==[#3]==])}}}}}



and then run


\lundklippfyllbild{k.jpg}{\textwidth}{\textheight}


it works well. Of course you should replace k.jpg with some other image name...

/Mikael

PS And please, if someone has opinions about the code, don't hesitate
to tell me. This is my first time using lua...


On Thu, May 1, 2014 at 4:59 PM, Otared Kavian <otared@gmail.com> wrote:
> Hi Mikael,
>
> Out of curiosity I tried to typeset your example (after adding the usual \starttext, \stoptext), but using
>         ConTeXt  ver: 2014.04.28 23:24 MKIV beta  fmt: 2014.4.29  int: english/english
> I obtained a TeX error:
>
> tex error       > error on line 13 in file /Users/kavian/Context/essais/mkii/figures/resize-and-center.tex: ! Undefined control sequence
>
>
> \startexternalfigurecollection ...igurecollection
>                                                   {#1}\settrue \c_grph_inclu...
> l.13 \clip[width=8cm,height=7cm]
>                               {%
>
>  3     \startexternalfigurecollection[k.jpg]
>  4         \useexternalfigure[k.jpg][k.jpg]
>  5     \stopexternalfigurecollection
>
> I did not understand what is the « Undefined control sequence », since I think \clip is a known control sequence.
>
> Best regards: OK
>
> On 1 mai 2014, at 15:38, Mikael P. Sundqvist <mickep@gmail.com> wrote:
>
>> OK, sorry for the noise. I think I have the solution:
>>
>> \startexternalfigurecollection[k.jpg]
>>     \useexternalfigure[k.jpg][k.jpg]
>> \stopexternalfigurecollection
>>
>>
>> \externalfigurecollectionminwidth{k.jpg}
>> \externalfigurecollectionmaxheight{k.jpg}
>>
>> \clip[width=8cm,height=7cm]{%
>> \framed[width=8cm,height=7cm,align={middle,lohi},offset=overlay]{%
>> \dimen0=\externalfigurecollectionminwidth{k.jpg}
>> \dimen2=\externalfigurecollectionmaxheight{k.jpg}
>> \dimen4=8cm
>> \dimen6=7cm
>> \startluacode
>> if tex.dimen[0] / tex.dimen[2] < tex.dimen[4] / tex.dimen[6] then
>>      local skalning =
>> -0.5*(tex.dimen[4]/tex.dimen[0]*tex.dimen[2]-tex.dimen[6])
>>      context("\\vskip%ssp", skalning)
>>      context.externalfigure({"k.jpg"},{width="8cm"})
>>      context.sprint("foo")
>> else
>>      local skalning =
>> -0.5*(tex.dimen[6]/tex.dimen[2]*tex.dimen[0]-tex.dimen[4])
>>      context("\\hskip%ssp", skalning)
>>      context.externalfigure({"k.jpg"},{height="7cm"})
>>      context.sprint("bar")
>> end
>> \stopluacode
>> }}
>>
>> If there are any bad side effects of this or simplifications, please
>> do not hesitate to tell me :)
>>
>> /Mikael
>>
>> On Thu, May 1, 2014 at 1:50 PM, Mikael P. Sundqvist <mickep@gmail.com> wrote:
>>> Hi!
>>>
>>> Assume that I want to fill in the text area with images, and I want to
>>> clip and scale them according to these rules:
>>>
>>> 1) If the image is "too wide" (in sense of proportions), then scale it
>>> so that the height fits the text area height, center it, and clip it
>>> to the text area. (See the attached image, on top, where the blue area
>>> is supposed to show the text area and the red rectangle the image.)
>>>
>>> 2) If the image is "too high" (in sense of proportions), then scale it
>>> so that the width fits the text area width, center it, and clip it to
>>> the text area. (See the attached image, on bottom.)
>>>
>>> The background why I want to do this is that I'm making a small
>>> template for presentations, and I'd like the users to insert images as
>>> background without really having to think about if their proportions
>>> fit or not.
>>>
>>> Best regards, Mikael
>> ___________________________________________________________________________________
>> If your question is of interest to others as well, please add an entry to the Wiki!
>>
>> maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
>> webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
>> archive  : http://foundry.supelec.fr/projects/contextrev/
>> wiki     : http://contextgarden.net
>> ___________________________________________________________________________________
>
> ___________________________________________________________________________________
> If your question is of interest to others as well, please add an entry to the Wiki!
>
> maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
> webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
> archive  : http://foundry.supelec.fr/projects/contextrev/
> wiki     : http://contextgarden.net
> ___________________________________________________________________________________
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: resize and center and clip image
  2014-05-01 15:07     ` Mikael P. Sundqvist
@ 2014-05-01 16:43       ` Otared Kavian
  2014-05-01 18:00       ` Aditya Mahajan
  1 sibling, 0 replies; 8+ messages in thread
From: Otared Kavian @ 2014-05-01 16:43 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Hi Mikael,

With your new definitions and lua code I could typeset and test a few examples: it is very nice, thanks for sharing!

Best regards: OK

On 1 mai 2014, at 17:07, Mikael P. Sundqvist <mickep@gmail.com> wrote:

> Interesting,
> 
> I use ConTeXt  ver: 2014.04.28 23:24 MKIV beta  fmt: 2014.4.29  int:
> english/english
> 
> and it works. I now defined this with argument:
> 
> \startluacode
> userdata = userdata or {}
> function userdata.lundklippfyllbild(str, bredd, hojd)
> if tex.dimen[0] / tex.dimen[2] < tex.dimen[4] / tex.dimen[6] then
>      local skalning =
> -0.5*(tex.dimen[4]/tex.dimen[0]*tex.dimen[2]-tex.dimen[6])
>      context("\\vskip%ssp", skalning)
>      context.externalfigure({str},{width=bredd})
>      context.sprint("foo")
> else
>      local skalning =
> -0.5*(tex.dimen[6]/tex.dimen[2]*tex.dimen[0]-tex.dimen[4])
>      context("\\hskip%ssp", skalning)
>      context.externalfigure({str},{height=hojd})
>      context.sprint("bar")
> end
> end
> \stopluacode
> 
> \unexpanded\def\lundklippfyllbild#1#2#3{%
> \startexternalfigurecollection[#1]%
> \useexternalfigure[#1][#1]%
> \stopexternalfigurecollection%
> \clip[
> width=#2,
> height=#3,
> hoffset=0mm,
> voffset=0mm,
> ]{%
> \framed[width=#2,height=#3,align={middle,lohi},offset=overlay,frame=off]{%
> \dimen0=\externalfigurecollectionminwidth{#1}%
> \dimen2=\externalfigurecollectionmaxheight{#1}%
> \dimen4=#2%
> \dimen6=#3%
> {\ctxlua{userdata.lundklippfyllbild([==[#1]==],[==[#2]==],[==[#3]==])}}}}}
> 
> 
> 
> and then run
> 
> 
> \lundklippfyllbild{k.jpg}{\textwidth}{\textheight}
> 
> 
> it works well. Of course you should replace k.jpg with some other image name...
> 
> /Mikael
> 
> PS And please, if someone has opinions about the code, don't hesitate
> to tell me. This is my first time using lua...
> 
> 
> On Thu, May 1, 2014 at 4:59 PM, Otared Kavian <otared@gmail.com> wrote:
>> Hi Mikael,
>> 
>> Out of curiosity I tried to typeset your example (after adding the usual \starttext, \stoptext), but using
>>        ConTeXt  ver: 2014.04.28 23:24 MKIV beta  fmt: 2014.4.29  int: english/english
>> I obtained a TeX error:
>> 
>> tex error       > error on line 13 in file /Users/kavian/Context/essais/mkii/figures/resize-and-center.tex: ! Undefined control sequence
>> 
>> 
>> \startexternalfigurecollection ...igurecollection
>>                                                  {#1}\settrue \c_grph_inclu...
>> l.13 \clip[width=8cm,height=7cm]
>>                              {%
>> 
>> 3     \startexternalfigurecollection[k.jpg]
>> 4         \useexternalfigure[k.jpg][k.jpg]
>> 5     \stopexternalfigurecollection
>> 
>> I did not understand what is the « Undefined control sequence », since I think \clip is a known control sequence.
>> 
>> Best regards: OK
>> 
>> On 1 mai 2014, at 15:38, Mikael P. Sundqvist <mickep@gmail.com> wrote:
>> 
>>> OK, sorry for the noise. I think I have the solution:
>>> 
>>> \startexternalfigurecollection[k.jpg]
>>>    \useexternalfigure[k.jpg][k.jpg]
>>> \stopexternalfigurecollection
>>> 
>>> 
>>> \externalfigurecollectionminwidth{k.jpg}
>>> \externalfigurecollectionmaxheight{k.jpg}
>>> 
>>> \clip[width=8cm,height=7cm]{%
>>> \framed[width=8cm,height=7cm,align={middle,lohi},offset=overlay]{%
>>> \dimen0=\externalfigurecollectionminwidth{k.jpg}
>>> \dimen2=\externalfigurecollectionmaxheight{k.jpg}
>>> \dimen4=8cm
>>> \dimen6=7cm
>>> \startluacode
>>> if tex.dimen[0] / tex.dimen[2] < tex.dimen[4] / tex.dimen[6] then
>>>     local skalning =
>>> -0.5*(tex.dimen[4]/tex.dimen[0]*tex.dimen[2]-tex.dimen[6])
>>>     context("\\vskip%ssp", skalning)
>>>     context.externalfigure({"k.jpg"},{width="8cm"})
>>>     context.sprint("foo")
>>> else
>>>     local skalning =
>>> -0.5*(tex.dimen[6]/tex.dimen[2]*tex.dimen[0]-tex.dimen[4])
>>>     context("\\hskip%ssp", skalning)
>>>     context.externalfigure({"k.jpg"},{height="7cm"})
>>>     context.sprint("bar")
>>> end
>>> \stopluacode
>>> }}
>>> 
>>> If there are any bad side effects of this or simplifications, please
>>> do not hesitate to tell me :)
>>> 
>>> /Mikael
>>> 
>>> On Thu, May 1, 2014 at 1:50 PM, Mikael P. Sundqvist <mickep@gmail.com> wrote:
>>>> Hi!
>>>> 
>>>> Assume that I want to fill in the text area with images, and I want to
>>>> clip and scale them according to these rules:
>>>> 
>>>> 1) If the image is "too wide" (in sense of proportions), then scale it
>>>> so that the height fits the text area height, center it, and clip it
>>>> to the text area. (See the attached image, on top, where the blue area
>>>> is supposed to show the text area and the red rectangle the image.)
>>>> 
>>>> 2) If the image is "too high" (in sense of proportions), then scale it
>>>> so that the width fits the text area width, center it, and clip it to
>>>> the text area. (See the attached image, on bottom.)
>>>> 
>>>> The background why I want to do this is that I'm making a small
>>>> template for presentations, and I'd like the users to insert images as
>>>> background without really having to think about if their proportions
>>>> fit or not.
>>>> 
>>>> Best regards, Mikael
>>> ___________________________________________________________________________________
>>> If your question is of interest to others as well, please add an entry to the Wiki!
>>> 
>>> maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
>>> webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
>>> archive  : http://foundry.supelec.fr/projects/contextrev/
>>> wiki     : http://contextgarden.net
>>> ___________________________________________________________________________________
>> 
>> ___________________________________________________________________________________
>> If your question is of interest to others as well, please add an entry to the Wiki!
>> 
>> maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
>> webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
>> archive  : http://foundry.supelec.fr/projects/contextrev/
>> wiki     : http://contextgarden.net
>> ___________________________________________________________________________________
> ___________________________________________________________________________________
> If your question is of interest to others as well, please add an entry to the Wiki!
> 
> maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
> webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
> archive  : http://foundry.supelec.fr/projects/contextrev/
> wiki     : http://contextgarden.net
> ___________________________________________________________________________________

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: resize and center and clip image
  2014-05-01 15:07     ` Mikael P. Sundqvist
  2014-05-01 16:43       ` Otared Kavian
@ 2014-05-01 18:00       ` Aditya Mahajan
  2014-05-01 19:27         ` Mikael P. Sundqvist
  2014-05-01 19:31         ` Wolfgang Schuster
  1 sibling, 2 replies; 8+ messages in thread
From: Aditya Mahajan @ 2014-05-01 18:00 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Thu, 1 May 2014, Mikael P. Sundqvist wrote:
> \startluacode
> userdata = userdata or {}
> function userdata.lundklippfyllbild(str, bredd, hojd)
> if tex.dimen[0] / tex.dimen[2] < tex.dimen[4] / tex.dimen[6] then
>      local skalning =
> -0.5*(tex.dimen[4]/tex.dimen[0]*tex.dimen[2]-tex.dimen[6])
>      context("\\vskip%ssp", skalning)
>      context.externalfigure({str},{width=bredd})
>      context.sprint("foo")
> else
>      local skalning =
> -0.5*(tex.dimen[6]/tex.dimen[2]*tex.dimen[0]-tex.dimen[4])
>      context("\\hskip%ssp", skalning)
>      context.externalfigure({str},{height=hojd})
>      context.sprint("bar")
> end
> end
> \stopluacode
>
> \unexpanded\def\lundklippfyllbild#1#2#3{%
> \startexternalfigurecollection[#1]%
> \useexternalfigure[#1][#1]%
> \stopexternalfigurecollection%
> \clip[
> width=#2,
> height=#3,
> hoffset=0mm,
> voffset=0mm,
> ]{%
> \framed[width=#2,height=#3,align={middle,lohi},offset=overlay,frame=off]{%
> \dimen0=\externalfigurecollectionminwidth{#1}%
> \dimen2=\externalfigurecollectionmaxheight{#1}%
> \dimen4=#2%
> \dimen6=#3%
> {\ctxlua{userdata.lundklippfyllbild([==[#1]==],[==[#2]==],[==[#3]==])}}}}}
>
>
>
> and then run
>
>
> \lundklippfyllbild{k.jpg}{\textwidth}{\textheight}

Here is an eTeX solution.

\unprotect

\newdimen\d_scaleandclip_actual_wd
\newdimen\d_scaleandclip_actual_ht

\newdimen\d_scaleandclip_requested_wd
\newdimen\d_scaleandclip_requested_ht

\newbox\scaleandclip_box

\installnamespace{scaleandclip}
\installcommandhandler \????scaleandclip {scaleandclip} \????scaleandclip

\setupscaleandclip
   [width=\textwidth,
    height=\textheight]

\unexpanded\def\scaleandclip{\dodoubleempty\doscaleandclip}

\def\doscaleandclip[#1][#2]%
   {\bgroup
    \ifsecondargument
       \edef\currentscaleandclip{#1}%
       \setupcurrentscaleandclip[#2]%
    \else\iffirstargument
       \doifassignmentelse{#1}
           {\let\currentscaleandclip\empty
            \setupcurrentscaleandclip[#1]}
           {\edef\currentscaleandclip{#1}}
     \else
       \let\currentscaleandclip\empty
     \fi\fi
     \dowithnextboxcs\scaleandclip_finish\hbox}

\def\scaleandclip_finish
     {%
       \d_scaleandclip_requested_wd \dimexpr\scaleandclipparameter\c!width\relax
       \d_scaleandclip_requested_ht \dimexpr\scaleandclipparameter\c!height\relax
       %
       \d_scaleandclip_actual_wd\wd\nextbox
       \d_scaleandclip_actual_ht\dimexpr\ht\nextbox + \dp\nextbox\relax
       %
       \ifdim\dimexpr\d_scaleandclip_actual_wd*100/\d_scaleandclip_requested_wd <
             \dimexpr\d_scaleandclip_actual_ht*100/\d_scaleandclip_requested_ht \relax
             \setbox\scaleandclip_box\hbox
                 {\scale[\c!width=\d_scaleandclip_requested_wd]{\box\nextbox}}%
             \scratchdimen=\the\dimexpr(\ht\scaleandclip_box - \d_scaleandclip_requested_ht)/2\relax
             \clip
               [
                 \c!voffset=\scratchdimen,
                 \c!height=\d_scaleandclip_requested_ht,
               ]{\box\scaleandclip_box}%
       \else
             \setbox\scaleandclip_box\hbox
                 {\scale[\c!height=\d_scaleandclip_requested_ht]{\box\nextbox}}%
             \scratchdimen=\the\dimexpr(\wd\scaleandclip_box - \d_scaleandclip_requested_wd)/2\relax
             \clip
               [
                 \c!hoffset=\scratchdimen,
                 \c!width=\d_scaleandclip_requested_wd,
               ]{\box\scaleandclip_box}%
       \fi
       \egroup}

\protect

The usage is:

\scaleandclip[width=..., height=...]{ ... any box ...}

simimlar to the usage of \scale macro.


\starttext

\dontleavehmode
\scaleandclip[width=3cm, height=3cm]{\externalfigure[cow.pdf][width=3cm,frame=on]}
\scale[maxwidth=3cm, maxheight=3cm]{\externalfigure[cow.pdf][width=3cm,frame=on]}

\dontleavehmode
\scaleandclip[width=3cm, height=3cm]{\externalfigure[cow.pdf][width=3cm,height=10cm,frame=on]}
\scale[maxwidth=3cm, maxheight=3cm]{\externalfigure[cow.pdf][width=3cm,height=10cm,frame=on]}

\dontleavehmode
\scaleandclip[width=3cm, height=3cm]{\externalfigure[cow.pdf][width=10cm,height=3cm,frame=on]}
\scale[maxwidth=3cm, maxheight=3cm]{\externalfigure[cow.pdf][width=10cm,height=3cm,frame=on]}

\stoptext
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: resize and center and clip image
  2014-05-01 18:00       ` Aditya Mahajan
@ 2014-05-01 19:27         ` Mikael P. Sundqvist
  2014-05-01 19:31         ` Wolfgang Schuster
  1 sibling, 0 replies; 8+ messages in thread
From: Mikael P. Sundqvist @ 2014-05-01 19:27 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Thu, May 1, 2014 at 8:00 PM, Aditya Mahajan <adityam@umich.edu> wrote:
> On Thu, 1 May 2014, Mikael P. Sundqvist wrote:
>>
>> \startluacode
>> userdata = userdata or {}
>> function userdata.lundklippfyllbild(str, bredd, hojd)
>> if tex.dimen[0] / tex.dimen[2] < tex.dimen[4] / tex.dimen[6] then
>>      local skalning =
>> -0.5*(tex.dimen[4]/tex.dimen[0]*tex.dimen[2]-tex.dimen[6])
>>      context("\\vskip%ssp", skalning)
>>      context.externalfigure({str},{width=bredd})
>>      context.sprint("foo")
>> else
>>      local skalning =
>> -0.5*(tex.dimen[6]/tex.dimen[2]*tex.dimen[0]-tex.dimen[4])
>>      context("\\hskip%ssp", skalning)
>>      context.externalfigure({str},{height=hojd})
>>      context.sprint("bar")
>> end
>> end
>> \stopluacode
>>
>> \unexpanded\def\lundklippfyllbild#1#2#3{%
>> \startexternalfigurecollection[#1]%
>> \useexternalfigure[#1][#1]%
>> \stopexternalfigurecollection%
>> \clip[
>> width=#2,
>> height=#3,
>> hoffset=0mm,
>> voffset=0mm,
>> ]{%
>> \framed[width=#2,height=#3,align={middle,lohi},offset=overlay,frame=off]{%
>> \dimen0=\externalfigurecollectionminwidth{#1}%
>> \dimen2=\externalfigurecollectionmaxheight{#1}%
>> \dimen4=#2%
>> \dimen6=#3%
>> {\ctxlua{userdata.lundklippfyllbild([==[#1]==],[==[#2]==],[==[#3]==])}}}}}
>>
>>
>>
>> and then run
>>
>>
>> \lundklippfyllbild{k.jpg}{\textwidth}{\textheight}
>
>
> Here is an eTeX solution.
>
> \unprotect
>
> \newdimen\d_scaleandclip_actual_wd
> \newdimen\d_scaleandclip_actual_ht
>
> \newdimen\d_scaleandclip_requested_wd
> \newdimen\d_scaleandclip_requested_ht
>
> \newbox\scaleandclip_box
>
> \installnamespace{scaleandclip}
> \installcommandhandler \????scaleandclip {scaleandclip} \????scaleandclip
>
> \setupscaleandclip
>   [width=\textwidth,
>    height=\textheight]
>
> \unexpanded\def\scaleandclip{\dodoubleempty\doscaleandclip}
>
> \def\doscaleandclip[#1][#2]%
>   {\bgroup
>    \ifsecondargument
>       \edef\currentscaleandclip{#1}%
>       \setupcurrentscaleandclip[#2]%
>    \else\iffirstargument
>       \doifassignmentelse{#1}
>           {\let\currentscaleandclip\empty
>            \setupcurrentscaleandclip[#1]}
>           {\edef\currentscaleandclip{#1}}
>     \else
>       \let\currentscaleandclip\empty
>     \fi\fi
>     \dowithnextboxcs\scaleandclip_finish\hbox}
>
> \def\scaleandclip_finish
>     {%
>       \d_scaleandclip_requested_wd
> \dimexpr\scaleandclipparameter\c!width\relax
>       \d_scaleandclip_requested_ht
> \dimexpr\scaleandclipparameter\c!height\relax
>       %
>       \d_scaleandclip_actual_wd\wd\nextbox
>       \d_scaleandclip_actual_ht\dimexpr\ht\nextbox + \dp\nextbox\relax
>       %
>
> \ifdim\dimexpr\d_scaleandclip_actual_wd*100/\d_scaleandclip_requested_wd <
>
> \dimexpr\d_scaleandclip_actual_ht*100/\d_scaleandclip_requested_ht \relax
>             \setbox\scaleandclip_box\hbox
>
> {\scale[\c!width=\d_scaleandclip_requested_wd]{\box\nextbox}}%
>             \scratchdimen=\the\dimexpr(\ht\scaleandclip_box -
> \d_scaleandclip_requested_ht)/2\relax
>             \clip
>               [
>                 \c!voffset=\scratchdimen,
>                 \c!height=\d_scaleandclip_requested_ht,
>               ]{\box\scaleandclip_box}%
>       \else
>             \setbox\scaleandclip_box\hbox
>
> {\scale[\c!height=\d_scaleandclip_requested_ht]{\box\nextbox}}%
>             \scratchdimen=\the\dimexpr(\wd\scaleandclip_box -
> \d_scaleandclip_requested_wd)/2\relax
>             \clip
>               [
>                 \c!hoffset=\scratchdimen,
>                 \c!width=\d_scaleandclip_requested_wd,
>               ]{\box\scaleandclip_box}%
>       \fi
>       \egroup}
>
> \protect
>
> The usage is:
>
> \scaleandclip[width=..., height=...]{ ... any box ...}
>
> simimlar to the usage of \scale macro.
>
>
> \starttext
>
> \dontleavehmode
> \scaleandclip[width=3cm,
> height=3cm]{\externalfigure[cow.pdf][width=3cm,frame=on]}
> \scale[maxwidth=3cm,
> maxheight=3cm]{\externalfigure[cow.pdf][width=3cm,frame=on]}
>
> \dontleavehmode
> \scaleandclip[width=3cm,
> height=3cm]{\externalfigure[cow.pdf][width=3cm,height=10cm,frame=on]}
> \scale[maxwidth=3cm,
> maxheight=3cm]{\externalfigure[cow.pdf][width=3cm,height=10cm,frame=on]}
>
> \dontleavehmode
> \scaleandclip[width=3cm,
> height=3cm]{\externalfigure[cow.pdf][width=10cm,height=3cm,frame=on]}
> \scale[maxwidth=3cm,
> maxheight=3cm]{\externalfigure[cow.pdf][width=10cm,height=3cm,frame=on]}
>
> \stoptext
>
> ___________________________________________________________________________________
> If your question is of interest to others as well, please add an entry to
> the Wiki!
>
> maillist : ntg-context@ntg.nl /
> http://www.ntg.nl/mailman/listinfo/ntg-context
> webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
> archive  : http://foundry.supelec.fr/projects/contextrev/
> wiki     : http://contextgarden.net
> ___________________________________________________________________________________


Thanks Aditya!

That is more general and looks more ConTeXt-ish to me with the
options. I should study your code in detail to learn how that is done.

Mikael
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: resize and center and clip image
  2014-05-01 18:00       ` Aditya Mahajan
  2014-05-01 19:27         ` Mikael P. Sundqvist
@ 2014-05-01 19:31         ` Wolfgang Schuster
  1 sibling, 0 replies; 8+ messages in thread
From: Wolfgang Schuster @ 2014-05-01 19:31 UTC (permalink / raw)
  To: mailing list for ConTeXt users


Am 01.05.2014 um 20:00 schrieb Aditya Mahajan <adityam@umich.edu>:

> On Thu, 1 May 2014, Mikael P. Sundqvist wrote:
>> \startluacode
>> userdata = userdata or {}
>> function userdata.lundklippfyllbild(str, bredd, hojd)
>> if tex.dimen[0] / tex.dimen[2] < tex.dimen[4] / tex.dimen[6] then
>>     local skalning =
>> -0.5*(tex.dimen[4]/tex.dimen[0]*tex.dimen[2]-tex.dimen[6])
>>     context("\\vskip%ssp", skalning)
>>     context.externalfigure({str},{width=bredd})
>>     context.sprint("foo")
>> else
>>     local skalning =
>> -0.5*(tex.dimen[6]/tex.dimen[2]*tex.dimen[0]-tex.dimen[4])
>>     context("\\hskip%ssp", skalning)
>>     context.externalfigure({str},{height=hojd})
>>     context.sprint("bar")
>> end
>> end
>> \stopluacode
>> 
>> \unexpanded\def\lundklippfyllbild#1#2#3{%
>> \startexternalfigurecollection[#1]%
>> \useexternalfigure[#1][#1]%
>> \stopexternalfigurecollection%
>> \clip[
>> width=#2,
>> height=#3,
>> hoffset=0mm,
>> voffset=0mm,
>> ]{%
>> \framed[width=#2,height=#3,align={middle,lohi},offset=overlay,frame=off]{%
>> \dimen0=\externalfigurecollectionminwidth{#1}%
>> \dimen2=\externalfigurecollectionmaxheight{#1}%
>> \dimen4=#2%
>> \dimen6=#3%
>> {\ctxlua{userdata.lundklippfyllbild([==[#1]==],[==[#2]==],[==[#3]==])}}}}}
>> 
>> 
>> 
>> and then run
>> 
>> 
>> \lundklippfyllbild{k.jpg}{\textwidth}{\textheight}
> 
> Here is an eTeX solution.
> 
> \unprotect
> 
> \newdimen\d_scaleandclip_actual_wd
> \newdimen\d_scaleandclip_actual_ht
> 
> \newdimen\d_scaleandclip_requested_wd
> \newdimen\d_scaleandclip_requested_ht
> 
> \newbox\scaleandclip_box
> 
> \installnamespace{scaleandclip}
> \installcommandhandler \????scaleandclip {scaleandclip} \????scaleandclip
> 
> \setupscaleandclip
>  [width=\textwidth,
>   height=\textheight]
> 
> \unexpanded\def\scaleandclip{\dodoubleempty\doscaleandclip}
> 
> \def\doscaleandclip[#1][#2]%
>  {\bgroup
>   \ifsecondargument
>      \edef\currentscaleandclip{#1}%
>      \setupcurrentscaleandclip[#2]%
>   \else\iffirstargument
>      \doifassignmentelse{#1}
>          {\let\currentscaleandclip\empty
>           \setupcurrentscaleandclip[#1]}
>          {\edef\currentscaleandclip{#1}}
>    \else
>      \let\currentscaleandclip\empty
>    \fi\fi
>    \dowithnextboxcs\scaleandclip_finish\hbox}
> 
> \def\scaleandclip_finish
>    {%
>      \d_scaleandclip_requested_wd \dimexpr\scaleandclipparameter\c!width\relax
>      \d_scaleandclip_requested_ht \dimexpr\scaleandclipparameter\c!height\relax
>      %
>      \d_scaleandclip_actual_wd\wd\nextbox
>      \d_scaleandclip_actual_ht\dimexpr\ht\nextbox + \dp\nextbox\relax
>      %
>      \ifdim\dimexpr\d_scaleandclip_actual_wd*100/\d_scaleandclip_requested_wd <
>            \dimexpr\d_scaleandclip_actual_ht*100/\d_scaleandclip_requested_ht \relax
>            \setbox\scaleandclip_box\hbox
>                {\scale[\c!width=\d_scaleandclip_requested_wd]{\box\nextbox}}%
>            \scratchdimen=\the\dimexpr(\ht\scaleandclip_box - \d_scaleandclip_requested_ht)/2\relax
>            \clip
>              [
>                \c!voffset=\scratchdimen,
>                \c!height=\d_scaleandclip_requested_ht,
>              ]{\box\scaleandclip_box}%
>      \else
>            \setbox\scaleandclip_box\hbox
>                {\scale[\c!height=\d_scaleandclip_requested_ht]{\box\nextbox}}%
>            \scratchdimen=\the\dimexpr(\wd\scaleandclip_box - \d_scaleandclip_requested_wd)/2\relax
>            \clip
>              [
>                \c!hoffset=\scratchdimen,
>                \c!width=\d_scaleandclip_requested_wd,
>              ]{\box\scaleandclip_box}%
>      \fi
>      \egroup}
> 
> \protect
> 
> The usage is:
> 
> \scaleandclip[width=..., height=...]{ ... any box ...}
> 
> simimlar to the usage of \scale macro.

We should convince Hans to add this functionality to the \scale macro with “factor=clip”.

Wolfgang
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-05-01 19:31 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-05-01 11:50 resize and center and clip image Mikael P. Sundqvist
2014-05-01 13:38 ` Mikael P. Sundqvist
2014-05-01 14:59   ` Otared Kavian
2014-05-01 15:07     ` Mikael P. Sundqvist
2014-05-01 16:43       ` Otared Kavian
2014-05-01 18:00       ` Aditya Mahajan
2014-05-01 19:27         ` Mikael P. Sundqvist
2014-05-01 19:31         ` Wolfgang Schuster

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).