Uh oh!
There was an error while loading. Please reload this page.
Propagate AVIF support from libgd - #7026
Conversation
cmb69
commented
May 21, 2021
Yes, at least some basic tests should be there. Also, please resolve the merge conflicts (might be related to Flavio's already merged PR). I'll try to add Windows and AppVeyor support over the weekend. |
morsssss
commented
May 21, 2021
Agreed - I'd bet the conflicts deal with the includes. Looks like I now have access to resolve those; so, thanks! :) |
Uh oh!
There was an error while loading. Please reload this page.
morsssss
commented
May 21, 2021
Added a little test suite! |
morsssss
commented
May 22, 2021
Well, I imagine I'd need to do something else here to help the build include libavif - or to leave it out if it's unwanted. I'm not sure where this gets configured.... |
cmb69
commented
May 22, 2021
I have just pushed a commit that fixes the imagetype support (not the real AVIF detection, though). I think that AppVeyor CI will now pass. Please pull that commit. To get the other CIs green, just remove the attempt to install libavif (and the |
cmb69
commented
May 22, 2021
There was another failing image test, which I fixed now. I also added AVIF support for Windows; that's not yet available for AppVeyor; I'm working on that. |
cmb69
commented
May 22, 2021
Two CIs green! \o/ I just pushed a commit which is supposed to build with AVIF support on AppVeyor. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
To avoid possible collision with the original libgd header files, which may be installed somewhere common like /usr/local/include
We fix an accidental fall through, and the order of enum values (COUNT has to be last). We also fix the respective test case.
This is only needed as long as libavif is not part of the official dependencies. This commit should be reverted before the PR is merged.
cmb69
commented
May 24, 2021
@morsssss, if you rebase your branch onto master (and force push afterwards) instead of merging master into your branch, the PR would be less noisy. :) |
morsssss
commented
May 24, 2021
@cmb69 Yes! I'm so embarrassed. I rebased to avoid just this problem... but I failed to force push. Then I watched in horror as it told me 302 files had been modified 😭 |
To avoid possible collision with the original libgd header files, which may be installed somewhere common like /usr/local/include
morsssss
commented
Jun 8, 2021
🎉🎉🎉 |
While not mentioned in the changelog entry, the commit to PHP itself does contain a new constant declaration... Related to: > GD: > * Avif support is now available through the `imagecreatefromavif()` and > `imageavif()` functions, if libgd has been built with avif support. Includes unit tests. Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L245-L247 * php/php-src#7026 * php/php-src@81f6d36#diff-00d1efef2247b288c86a6c3bfefac111a4774fbc5453fdc02dcf36c4a23da283R373
> GD: > * Avif support is now available through the `imagecreatefromavif()` and > `imageavif()` functions, if libgd has been built with avif support. Includes unit tests. Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L245-L247 * php/php-src#7026 * php/php-src@81f6d36
(mentioned in new features, but not in the new functions list) > GD: > * Avif support is now available through the `imagecreatefromavif()` and > `imageavif()` functions, if libgd has been built with avif support. Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L245-L247 * php/php-src#7026 * php/php-src@81f6d36
> GD: > * Avif support is now available through the `imagecreatefromavif()` and > `imageavif()` functions, if libgd has been built with avif support. While not mentioned in the changelog entry, the commit to PHP does contain a new constant declaration... Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L245-L247 * php/php-src#7026 * php/php-src@81f6d36#diff-00d1efef2247b288c86a6c3bfefac111a4774fbc5453fdc02dcf36c4a23da283R373 > GD: > * `imagewebp()` can do lossless WebP encoding by passing `IMG_WEBP_LOSSLESS` as > quality. This constant is only defined, if a libgd is used which supports > lossless WebP encoding. Refs: * https://github.com/php/php-src/blob/3a71fcf5caf042a4ce8a586a6b554fd70432e1e2/UPGRADING#L568-L571 * php/php-src#7348 * php/php-src@eb6c9eb
* PHP 8.1 | MigrationGuide/New constants: add missing constants [1] > * Added CURLOPT_DOH_URL option > * Added certificate blob options when for libcurl >= 7.71.0: > > CURLOPT_ISSUERCERT_BLOB > CURLOPT_PROXY_ISSUERCERT > CURLOPT_PROXY_ISSUERCERT_BLOB > CURLOPT_PROXY_SSLCERT_BLOB > CURLOPT_PROXY_SSLKEY_BLOB > CURLOPT_SSLCERT_BLOB > CURLOPT_SSLKEY_BLOB Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L220-L229 * php/php-src#6612 * php/php-src@3dad63b * php/php-src#7194 * php/php-src@b11785c * PHP 8.1 | MigrationGuide/New constants: add missing constants [2] > GD: > * Avif support is now available through the `imagecreatefromavif()` and > `imageavif()` functions, if libgd has been built with avif support. While not mentioned in the changelog entry, the commit to PHP does contain a new constant declaration... Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L245-L247 * php/php-src#7026 * php/php-src@81f6d36#diff-00d1efef2247b288c86a6c3bfefac111a4774fbc5453fdc02dcf36c4a23da283R373 > GD: > * `imagewebp()` can do lossless WebP encoding by passing `IMG_WEBP_LOSSLESS` as > quality. This constant is only defined, if a libgd is used which supports > lossless WebP encoding. Refs: * https://github.com/php/php-src/blob/3a71fcf5caf042a4ce8a586a6b554fd70432e1e2/UPGRADING#L568-L571 * php/php-src#7348 * php/php-src@eb6c9eb * PHP 8.1 | MigrationGuide/New constants: add missing constants [3] > Added `POSIX_RLIMIT_KQUEUES` and `POSIX_RLIMIT_NPTS`. These rlimits are only available on FreeBSD. Refs: * https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.posix * php/php-src#6608 * php/php-src@ebca8de * PHP 8.1 | MigrationGuide/New constants: add missing constants [4] Refs: * https://wiki.php.net/rfc/readonly_properties_v2 * php/php-src#7089 * php/php-src@6780aaa * PHP 8.1 | MigrationGuide/New constants: add missing constants [5] While not mentioned anywhere at all, the commit to PHP itself adding support for the Sodium xchacha* functions, does declare a couple of new constants as well... Refs: * php/php-src#6868 * php/php-src@f7f1f7f#diff-3fe4027560fd299248af1dc1efe04287cc2b6418e8f01755c05c9db64b668b1eR352-R357 While not mentioned anywhere at all, the commit to PHP itself adding support for the Sodium ristretto255* functions, also declares a number of new constants as well... Refs: * php/php-src#6922 * php/php-src@9b794f8#diff-3fe4027560fd299248af1dc1efe04287cc2b6418e8f01755c05c9db64b668b1eR368-R381 Co-authored-by: jrfnl <jrfnl@users.noreply.github.com> ClosesGH-1449.
* PHP 8.1 | MigrationGuide/New functions: add missing functions [1] (mentioned in new features, but not in the new functions list) > GD: > * Avif support is now available through the `imagecreatefromavif()` and > `imageavif()` functions, if libgd has been built with avif support. Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L245-L247 * php/php-src#7026 * php/php-src@81f6d36 * PHP 8.1 | MigrationGuide/New functions: add missing functions [2] (mentioned in new features, but not in the new functions list) > `mysqli_result::fetch_column()` has been added to allow fetching a single scalar value from the result set. While only the method is mentioned in the RFC and the Migration guide, a procedural version of the same was also implemented. Refs: * https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.mysqli.mysqli_fetch_column * https://wiki.php.net/rfc/mysqli_fetch_column * php/php-src#6798 * php/php-src@54222a6 Co-authored-by: jrfnl <jrfnl@users.noreply.github.com> ClosesGH-1448.
* PHP 8.1 | MigrationGuide/New constants: add missing constants [1] > * Added CURLOPT_DOH_URL option > * Added certificate blob options when for libcurl >= 7.71.0: > > CURLOPT_ISSUERCERT_BLOB > CURLOPT_PROXY_ISSUERCERT > CURLOPT_PROXY_ISSUERCERT_BLOB > CURLOPT_PROXY_SSLCERT_BLOB > CURLOPT_PROXY_SSLKEY_BLOB > CURLOPT_SSLCERT_BLOB > CURLOPT_SSLKEY_BLOB Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L220-L229 * php/php-src#6612 * php/php-src@3dad63b * php/php-src#7194 * php/php-src@b11785c * PHP 8.1 | MigrationGuide/New constants: add missing constants [2] > GD: > * Avif support is now available through the `imagecreatefromavif()` and > `imageavif()` functions, if libgd has been built with avif support. While not mentioned in the changelog entry, the commit to PHP does contain a new constant declaration... Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L245-L247 * php/php-src#7026 * php/php-src@81f6d36#diff-00d1efef2247b288c86a6c3bfefac111a4774fbc5453fdc02dcf36c4a23da283R373 > GD: > * `imagewebp()` can do lossless WebP encoding by passing `IMG_WEBP_LOSSLESS` as > quality. This constant is only defined, if a libgd is used which supports > lossless WebP encoding. Refs: * https://github.com/php/php-src/blob/3a71fcf5caf042a4ce8a586a6b554fd70432e1e2/UPGRADING#L568-L571 * php/php-src#7348 * php/php-src@eb6c9eb * PHP 8.1 | MigrationGuide/New constants: add missing constants [3] > Added `POSIX_RLIMIT_KQUEUES` and `POSIX_RLIMIT_NPTS`. These rlimits are only available on FreeBSD. Refs: * https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.posix * php/php-src#6608 * php/php-src@ebca8de * PHP 8.1 | MigrationGuide/New constants: add missing constants [4] Refs: * https://wiki.php.net/rfc/readonly_properties_v2 * php/php-src#7089 * php/php-src@6780aaa * PHP 8.1 | MigrationGuide/New constants: add missing constants [5] While not mentioned anywhere at all, the commit to PHP itself adding support for the Sodium xchacha* functions, does declare a couple of new constants as well... Refs: * php/php-src#6868 * php/php-src@f7f1f7f#diff-3fe4027560fd299248af1dc1efe04287cc2b6418e8f01755c05c9db64b668b1eR352-R357 While not mentioned anywhere at all, the commit to PHP itself adding support for the Sodium ristretto255* functions, also declares a number of new constants as well... Refs: * php/php-src#6922 * php/php-src@9b794f8#diff-3fe4027560fd299248af1dc1efe04287cc2b6418e8f01755c05c9db64b668b1eR368-R381 Co-authored-by: jrfnl <jrfnl@users.noreply.github.com> ClosesphpGH-1449.
* PHP 8.1 | MigrationGuide/New functions: add missing functions [1] (mentioned in new features, but not in the new functions list) > GD: > * Avif support is now available through the `imagecreatefromavif()` and > `imageavif()` functions, if libgd has been built with avif support. Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L245-L247 * php/php-src#7026 * php/php-src@81f6d36 * PHP 8.1 | MigrationGuide/New functions: add missing functions [2] (mentioned in new features, but not in the new functions list) > `mysqli_result::fetch_column()` has been added to allow fetching a single scalar value from the result set. While only the method is mentioned in the RFC and the Migration guide, a procedural version of the same was also implemented. Refs: * https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.mysqli.mysqli_fetch_column * https://wiki.php.net/rfc/mysqli_fetch_column * php/php-src#6798 * php/php-src@54222a6 Co-authored-by: jrfnl <jrfnl@users.noreply.github.com> ClosesphpGH-1448.
When the avif support was first added (phpGH-7026), php-src did not use GitHub Actions. When we moved to GitHub Actions for CI, the `--with-avif` option nor the `libavif-dev` dependencies were not added. Cirrus CI still runs the tests, and now that we no longer use Travis CI, this brings parity to test avif on x64 tests on GitHub Actions as well. `libavif-dev` package's x86 builds seem to be missing[^1][^2] on older Ubuntu versions, so this commit only adds it for x64 builds. [^1]: https://packages.ubuntu.com/jammy/libavif-dev [^2]: https://packages.ubuntu.com/noble/libavif-dev
When the avif support was first added (GH-7026), php-src did not use GitHub Actions. When we moved to GitHub Actions for CI, the `--with-avif` option nor the `libavif-dev` dependencies were not added. Cirrus CI still runs the tests, and now that we no longer use Travis CI, this brings parity to test avif on x64 tests on GitHub Actions as well. `libavif-dev` package's x86 builds seem to be missing[^1][^2] on older Ubuntu versions, so this commit only adds it for x64 builds. [^1]: https://packages.ubuntu.com/jammy/libavif-dev [^2]: https://packages.ubuntu.com/noble/libavif-dev
The work to support AVIF in
getimagesize()andimagecreatefromstring()will be done in a followup PR.Also I realize I need some tests :)
/cc @cmb69