/**
* Class PixelUnitConversion
* @package app\common\util
*/
class PixelUnitConversion
{
const PT_PER_PX = 0.75;
const IN_PER_PT = 72;
const CM_PER_PT = 28.3;
const MM_PER_PT = 2.83;
const EMU_PER_PX = 9525;
/**
* @param $emu
* @return float
*/
public static function emuToPx($emu)
{
return round($emu/self::EMU_PER_PX, 0);
}
/**
* @param $pt
* @return float
*/
public static function ptToPx($pt)
{
return round($pt/self::PT_PER_PX, 0);
}
/**
* @param $in
* @return float
*/
public static function inToPx($in)
{
return round(self::inToPt($in) * self::PT_PER_PX, 0);
}
/**
* @param $in
* @return float
*/
public static function inToPt($in) {
return round($in * self::IN_PER_PT, 0);
}
/**
* @param $cm
* @return float
*/
public static function cmToPx($cm)
{
return round(self::cmToPt($cm) * self::PT_PER_PX, 0);
}
/**
* @param $cm
* @return float
*/
public static function cmToPt($cm) {
return round($cm * self::CM_PER_PT, 0);
}
/**
* @param $mm
* @return float
*/
public static function mmToPx($mm)
{
return round(self::mmToPt($mm) * self::PT_PER_PX, 0);
}
/**
* @param $mm
* @return float
*/
public static function mmToPt($mm) {
return round($mm * self::MM_PER_PT, 0);
}
/**
* @param $string
* @return float|int
*/
public static function stringToPx($string)
{
if (!$string) {
return 0;
} elseif (is_numeric($string)) {
return self::emuToPx($string);
}
$pre = strtolower(substr($string, -2));
$num = intval($string);
if ($pre == 'in') {
return self::inToPx($num);
} elseif ($pre == 'pt') {
return self::ptToPx($num);
} elseif ($pre == 'cm') {
return self::cmToPx($num);
} elseif ($pre == 'mm') {
return self::mmToPx($num);
} elseif ($pre == 'px') {
return $num;
}
return 0;
}
}
使用
$width = '120pt';
$px = PixelUnitConversion::stringToPx($width);
echo $px;
有些转换没实现,可以扩展,目前我只需要转换成px 所以够用了